diff --git a/clang/lib/Interpreter/IncrementalParser.cpp b/clang/lib/Interpreter/IncrementalParser.cpp index 370bcbfee8b01..29f66333b6188 100644 --- a/clang/lib/Interpreter/IncrementalParser.cpp +++ b/clang/lib/Interpreter/IncrementalParser.cpp @@ -373,7 +373,13 @@ std::unique_ptr IncrementalParser::GenModule() { void IncrementalParser::CleanUpPTU(PartialTranslationUnit &PTU) { TranslationUnitDecl *MostRecentTU = PTU.TUPart; + if (!MostRecentTU) + return; + TranslationUnitDecl *FirstTU = MostRecentTU->getFirstDecl(); + if (!FirstTU) + return; + if (StoredDeclsMap *Map = FirstTU->getPrimaryContext()->getLookupPtr()) { for (auto I = Map->begin(); I != Map->end(); ++I) { StoredDeclsList &List = I->second; diff --git a/clang/test/Interpreter/anonymous-scope-fail.cpp b/clang/test/Interpreter/anonymous-scope-fail.cpp new file mode 100644 index 0000000000000..c32b42d2859d9 --- /dev/null +++ b/clang/test/Interpreter/anonymous-scope-fail.cpp @@ -0,0 +1,10 @@ +// RUN: clang-repl "int x = 10;" "{ int t; a::b(t); }" "int y = 10;" +// REQUIRES: host-supports-jit +// UNSUPPORTED: system-aix +// RUN: cat %s | not clang-repl | FileCheck %s +{ int t; a::b(t); } +extern "C" int printf(const char *, ...); +int i = 42; +auto r1 = printf("i = %d\n", i); +// CHECK: i = 42 +%quit