[clang] 6a37cee - Fix for a clang-repl crash when passing non-existent file to --Xcc (#225861)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 25 23:14:30 PDT 2026
Author: asudarsa-qti
Date: 2026-09-26T09:14:23+03:00
New Revision: 6a37cee09997b28c6cc708dd36b283bbd5bd7147
URL: https://github.com/llvm/llvm-project/commit/6a37cee09997b28c6cc708dd36b283bbd5bd7147
DIFF: https://github.com/llvm/llvm-project/commit/6a37cee09997b28c6cc708dd36b283bbd5bd7147.diff
LOG: Fix for a clang-repl crash when passing non-existent file to --Xcc (#225861)
Problem: When clang-repl fails to initialize because an --Xcc file does
not exist, Interpreter::create() destroys the partially initialized
Interpreter. Its destructor unconditionally calls FinalizeAction(),
which invokes FrontendAction::EndSourceFile() without a registered
CompilerInstance and triggers an assertion.
Fix: Track whether interpreter initialization completed successfully and
only finalize the frontend action for successfully initialized
interpreters.
Test: Add a regression test covering a nonexistent --Xcc file.
This change resolves https://github.com/llvm/llvm-project/issues/225429
Assisted by gpt-5.6-luna
---------
Co-authored-by: Anutosh Bhat <andersonbhat491 at gmail.com>
Added:
clang/test/Interpreter/nonexistent-xcc-file.cpp
Modified:
clang/lib/Interpreter/IncrementalAction.cpp
Removed:
################################################################################
diff --git a/clang/lib/Interpreter/IncrementalAction.cpp b/clang/lib/Interpreter/IncrementalAction.cpp
index 85f00c36dd5aa..2c1ad404a3e7d 100644
--- a/clang/lib/Interpreter/IncrementalAction.cpp
+++ b/clang/lib/Interpreter/IncrementalAction.cpp
@@ -85,7 +85,8 @@ void IncrementalAction::EndSourceFile() {
void IncrementalAction::FinalizeAction() {
assert(!IsTerminating && "Already finalized!");
IsTerminating = true;
- EndSourceFile();
+ if (!getCurrentInput().isEmpty())
+ EndSourceFile();
}
void IncrementalAction::CacheCodeGenModule() {
diff --git a/clang/test/Interpreter/nonexistent-xcc-file.cpp b/clang/test/Interpreter/nonexistent-xcc-file.cpp
new file mode 100644
index 0000000000000..7b1bb8abd94ce
--- /dev/null
+++ b/clang/test/Interpreter/nonexistent-xcc-file.cpp
@@ -0,0 +1,7 @@
+// RUN: not clang-repl --Xcc=%t/nonexistent.cpp 2>&1 | FileCheck --ignore-case %s
+
+// CHECK: error: error reading '{{.*}}nonexistent.cpp': No such file or directory
+// CHECK-NOT: Compiler instance not registered
+// CHECK-NOT: Assertion
+// CHECK-NOT: segmentation fault
+// CHECK-NOT: core dumped
More information about the cfe-commits
mailing list