https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/132977
Fix crash when looking up associated namespaces for member pointers with an unknown class, due to dependency. It was a regression introduced in https://github.com/llvm/llvm-project/pull/131965 and reported here: https://github.com/llvm/llvm-project/pull/132317#issuecomment-2752187095 No change notes since the regression was never released. >From 5b5788e969e2899a52c3b7a40f153fcd424796fc Mon Sep 17 00:00:00 2001 From: Matheus Izvekov <mizve...@gmail.com> Date: Tue, 25 Mar 2025 16:16:08 -0300 Subject: [PATCH] [clang] fix crash with adl for member pointers with dependent class Fix crash when looking up associated namespaces for member pointers with an unknown class, due to dependency. It was a regression introduced in https://github.com/llvm/llvm-project/pull/131965 and reported here: https://github.com/llvm/llvm-project/pull/132317#issuecomment-2752187095 No change notes since the regression was never released. --- clang/lib/Sema/SemaLookup.cpp | 4 ++-- clang/test/SemaCXX/member-pointer.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index 59dc6df5fbe9f..876340010cf5f 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -3210,8 +3210,8 @@ addAssociatedClassesAndNamespaces(AssociatedLookup &Result, QualType Ty) { // X. case Type::MemberPointer: { const MemberPointerType *MemberPtr = cast<MemberPointerType>(T); - addAssociatedClassesAndNamespaces( - Result, MemberPtr->getMostRecentCXXRecordDecl()); + if (CXXRecordDecl *Class = MemberPtr->getMostRecentCXXRecordDecl()) + addAssociatedClassesAndNamespaces(Result, Class); T = MemberPtr->getPointeeType().getTypePtr(); continue; } diff --git a/clang/test/SemaCXX/member-pointer.cpp b/clang/test/SemaCXX/member-pointer.cpp index 3d9dd05755b8c..fa3e6a5a4bcf7 100644 --- a/clang/test/SemaCXX/member-pointer.cpp +++ b/clang/test/SemaCXX/member-pointer.cpp @@ -355,3 +355,13 @@ namespace GH132401 { }; template struct CallableHelper<void (QIODevice::*)()>; } // namespace GH132401 + +namespace adl_dependent_class { + struct A { + template <class T> A(T); + }; + struct C; + template <class T> void d(void (T::*)()); + void f(A); + void g() { f(d<C>); } +} // namespace adl_dependent_class _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits