llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Pavel Kalugin (p4vook) <details> <summary>Changes</summary> Check if the last translation unit or its first declaration are actually empty and do not nead cleanup. Previously this caused segmentation fault on empty PTUs. Add a regression test. Fixes: #<!-- -->72980 --- Full diff: https://github.com/llvm/llvm-project/pull/75629.diff 2 Files Affected: - (modified) clang/lib/Interpreter/IncrementalParser.cpp (+8) - (added) clang/test/Interpreter/anonymous-scope-fail.cpp (+10) ``````````diff diff --git a/clang/lib/Interpreter/IncrementalParser.cpp b/clang/lib/Interpreter/IncrementalParser.cpp index 370bcbfee8b014..f894af881134bb 100644 --- a/clang/lib/Interpreter/IncrementalParser.cpp +++ b/clang/lib/Interpreter/IncrementalParser.cpp @@ -373,7 +373,15 @@ std::unique_ptr<llvm::Module> 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 00000000000000..c32b42d2859d97 --- /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 `````````` </details> https://github.com/llvm/llvm-project/pull/75629 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits