[clang] [clang][bytecode] Fix a crash when redeclaring extern globals (PR #164204)

via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 19 22:46:41 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

<details>
<summary>Changes</summary>

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

---
Full diff: https://github.com/llvm/llvm-project/pull/164204.diff


2 Files Affected:

- (modified) clang/lib/AST/ByteCode/Program.cpp (+4-1) 
- (modified) clang/test/AST/ByteCode/extern.cpp (+4-2) 


``````````diff
diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp
index e653782f61fdf..e0b2852f0e906 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;
diff --git a/clang/test/AST/ByteCode/extern.cpp b/clang/test/AST/ByteCode/extern.cpp
index a616269911a7e..c3215931d41f8 100644
--- a/clang/test/AST/ByteCode/extern.cpp
+++ b/clang/test/AST/ByteCode/extern.cpp
@@ -1,9 +1,11 @@
 // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=both,expected %s
-// RUN: %clang_cc1 -verify=both,ref %s
-
+// RUN: %clang_cc1                                         -verify=both,ref      %s
 
 // both-no-diagnostics
 
+extern const double Num;
+extern const double Num = 12;
+
 extern const int E;
 constexpr int getE() {
   return E;

``````````

</details>


https://github.com/llvm/llvm-project/pull/164204


More information about the cfe-commits mailing list