Author: Timm Baeder
Date: 2026-09-15T16:08:57+02:00
New Revision: 6f304f56c86382c2ad296d440c87f24abb05b4c3

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

LOG: [clang][bytecode] Fix castBackMemberPointer with null member pointers 
(#223680)

Do the same thing the current interpreter does: nothing.

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/Interp.cpp
    clang/test/AST/ByteCode/memberpointers.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/Interp.cpp 
b/clang/lib/AST/ByteCode/Interp.cpp
index a951827d5d27f..5b0f16abdbf46 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -3203,6 +3203,11 @@ static bool castBackMemberPointer(InterpState &S,
                                   const MemberPointer &MemberPtr,
                                   int32_t BaseOffset,
                                   const RecordDecl *BaseDecl) {
+  if (!MemberPtr.getDecl()) {
+    S.Stk.push<MemberPointer>(MemberPtr);
+    return true;
+  }
+
   const CXXRecordDecl *Expected;
   if (MemberPtr.getPathLength() >= 2)
     Expected = MemberPtr.getPathEntry(MemberPtr.getPathLength() - 2);

diff  --git a/clang/test/AST/ByteCode/memberpointers.cpp 
b/clang/test/AST/ByteCode/memberpointers.cpp
index e2a154914c83b..f077b7ad7ffac 100644
--- a/clang/test/AST/ByteCode/memberpointers.cpp
+++ b/clang/test/AST/ByteCode/memberpointers.cpp
@@ -314,3 +314,9 @@ namespace Errors {
   static_assert(test1(), ""); // both-error {{not an integral constant 
expression}}
 #endif
 }
+
+namespace NoDecl {
+  struct S {};
+  struct T : S {};
+  void (T::*foo)(void *) = (void (S::*)(void *))(void (T::*)(void *))0;
+}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to