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
