[clang] 9606159 - [clang] fix crash with ADL for member pointers with dependent class (#132977)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 25 14:15:58 PDT 2025
Author: Matheus Izvekov
Date: 2025-03-25T18:15:55-03:00
New Revision: 960615954e4cb3150ae4a479fa7f9d0d17035eea
URL: https://github.com/llvm/llvm-project/commit/960615954e4cb3150ae4a479fa7f9d0d17035eea
DIFF: https://github.com/llvm/llvm-project/commit/960615954e4cb3150ae4a479fa7f9d0d17035eea.diff
LOG: [clang] fix crash with ADL for member pointers with dependent class (#132977)
Added:
Modified:
clang/lib/Sema/SemaLookup.cpp
clang/test/SemaCXX/member-pointer.cpp
Removed:
################################################################################
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
More information about the cfe-commits
mailing list