[clang] fbd643f - [clang][Interp] Don't try to activate root pointers

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Thu May 23 05:02:32 PDT 2024


Author: Timm Bäder
Date: 2024-05-23T14:01:32+02:00
New Revision: fbd643fb22607b933a4e129ae86a7334b62c9b55

URL: https://github.com/llvm/llvm-project/commit/fbd643fb22607b933a4e129ae86a7334b62c9b55
DIFF: https://github.com/llvm/llvm-project/commit/fbd643fb22607b933a4e129ae86a7334b62c9b55.diff

LOG: [clang][Interp] Don't try to activate root pointers

No inline descriptor means we can't do that.

Added: 
    

Modified: 
    clang/lib/AST/Interp/Interp.h
    clang/test/AST/Interp/cxx98.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h
index fc496b66445aa..bcb6fb4d65218 100644
--- a/clang/lib/AST/Interp/Interp.h
+++ b/clang/lib/AST/Interp/Interp.h
@@ -1335,17 +1335,19 @@ inline bool GetPtrThisBase(InterpState &S, CodePtr OpPC, uint32_t Off) {
 
 inline bool FinishInitPop(InterpState &S, CodePtr OpPC) {
   const Pointer &Ptr = S.Stk.pop<Pointer>();
-  if (Ptr.canBeInitialized())
+  if (Ptr.canBeInitialized()) {
     Ptr.initialize();
-  Ptr.activate();
+    Ptr.activate();
+  }
   return true;
 }
 
 inline bool FinishInit(InterpState &S, CodePtr OpPC) {
   const Pointer &Ptr = S.Stk.peek<Pointer>();
-  if (Ptr.canBeInitialized())
+  if (Ptr.canBeInitialized()) {
     Ptr.initialize();
-  Ptr.activate();
+    Ptr.activate();
+  }
   return true;
 }
 

diff  --git a/clang/test/AST/Interp/cxx98.cpp b/clang/test/AST/Interp/cxx98.cpp
index be81735329db8..e68e4dbc8d74b 100644
--- a/clang/test/AST/Interp/cxx98.cpp
+++ b/clang/test/AST/Interp/cxx98.cpp
@@ -50,3 +50,7 @@ _Static_assert(c0_test == 0, "");
 int a = 0; // both-note {{declared here}}
 _Static_assert(a == 0, ""); // both-error {{static assertion expression is not an integral constant expression}} \
                             // both-note {{read of non-const variable 'a' is not allowed in a constant expression}}
+
+struct SelfReference { SelfReference &r; };
+extern SelfReference self_reference_1;
+SelfReference self_reference_2 = {self_reference_1};


        


More information about the cfe-commits mailing list