[clang] 6f304f5 - [clang][bytecode] Fix castBackMemberPointer with null member pointers (#223680)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 15 07:09:03 PDT 2026
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;
+}
More information about the cfe-commits
mailing list