From 7b0c51a43917fdd4dae2f9415b6c041ca4d1c3f1 Mon Sep 17 00:00:00 2001 From: Timm Baeder Date: Mon, 20 Oct 2025 12:55:06 +0200 Subject: [clang][bytecode] Fix a crash when redeclaring extern globals (#164204) One iteration of this loop might've already fixed up the pointers of coming globals, so check for that explicitly. Fixes https://github.com/llvm/llvm-project/issues/164151 --- clang/lib/AST/ByteCode/Program.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'clang/lib/AST/ByteCode/Program.cpp') diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp index e653782..e0b2852 100644 --- a/clang/lib/AST/ByteCode/Program.cpp +++ b/clang/lib/AST/ByteCode/Program.cpp @@ -226,7 +226,10 @@ UnsignedOrNone Program::createGlobal(const ValueDecl *VD, const Expr *Init) { Globals[PIdx] = NewGlobal; // All pointers pointing to the previous extern decl now point to the // new decl. - RedeclBlock->movePointersTo(NewGlobal->block()); + // A previous iteration might've already fixed up the pointers for this + // global. + if (RedeclBlock != NewGlobal->block()) + RedeclBlock->movePointersTo(NewGlobal->block()); } } PIdx = *Idx; -- cgit v1.1