aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVassil Vassilev <v.g.vassilev@gmail.com>2022-12-11 21:08:30 +0000
committerVassil Vassilev <v.g.vassilev@gmail.com>2023-02-17 09:09:04 +0000
commit159073bc0a873b9aa2bc559a8ceba970b049cda2 (patch)
tree34c1d36ebf7f491afdbd4f07ab4b6dee6c6d58f8
parenteb2f946e780cc0e82260c775930fa0509885b1ea (diff)
downloadllvm-159073bc0a873b9aa2bc559a8ceba970b049cda2.zip
llvm-159073bc0a873b9aa2bc559a8ceba970b049cda2.tar.gz
llvm-159073bc0a873b9aa2bc559a8ceba970b049cda2.tar.bz2
[clang-repl] Support compound statement as a top-level statement.
This patch teaches our incremental compilation infrastructure to push and pop a fake function scope making the Parser happy when parsing compound statements as part of a top-leve statement declaration. Differential revision: https://reviews.llvm.org/D139798
-rw-r--r--clang/lib/Parse/ParseDecl.cpp2
-rw-r--r--clang/test/Interpreter/execute-stmts.cpp5
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index d32f26b..6465d859 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -5400,7 +5400,9 @@ Parser::DeclGroupPtrTy Parser::ParseTopLevelStmtDecl() {
// Parse a top-level-stmt.
Parser::StmtVector Stmts;
ParsedStmtContext SubStmtCtx = ParsedStmtContext();
+ Actions.PushFunctionScope();
StmtResult R = ParseStatementOrDeclaration(Stmts, SubStmtCtx);
+ Actions.PopFunctionScopeInfo();
if (!R.isUsable())
return nullptr;
diff --git a/clang/test/Interpreter/execute-stmts.cpp b/clang/test/Interpreter/execute-stmts.cpp
index 567b783..2d4c17e 100644
--- a/clang/test/Interpreter/execute-stmts.cpp
+++ b/clang/test/Interpreter/execute-stmts.cpp
@@ -34,5 +34,10 @@ printf("i = %d\n", i);
for (; i > 4; --i) printf("i = %d\n", i);
// CHECK-NEXT: i = 5
+{++i;}
+
+for (; i > 4; --i) { printf("i = %d\n", i); };
+// CHECK-NEXT: i = 5
+
int j = i; printf("j = %d\n", j);
// CHECK-NEXT: j = 4