Skip to content

Commit 9606159

Browse files
authored
[clang] fix crash with ADL for member pointers with dependent class (#132977)
1 parent 2f3c937 commit 9606159

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

clang/lib/Sema/SemaLookup.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3210,8 +3210,8 @@ addAssociatedClassesAndNamespaces(AssociatedLookup &Result, QualType Ty) {
32103210
// X.
32113211
case Type::MemberPointer: {
32123212
const MemberPointerType *MemberPtr = cast<MemberPointerType>(T);
3213-
addAssociatedClassesAndNamespaces(
3214-
Result, MemberPtr->getMostRecentCXXRecordDecl());
3213+
if (CXXRecordDecl *Class = MemberPtr->getMostRecentCXXRecordDecl())
3214+
addAssociatedClassesAndNamespaces(Result, Class);
32153215
T = MemberPtr->getPointeeType().getTypePtr();
32163216
continue;
32173217
}

clang/test/SemaCXX/member-pointer.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,3 +355,13 @@ namespace GH132401 {
355355
};
356356
template struct CallableHelper<void (QIODevice::*)()>;
357357
} // namespace GH132401
358+
359+
namespace adl_dependent_class {
360+
struct A {
361+
template <class T> A(T);
362+
};
363+
struct C;
364+
template <class T> void d(void (T::*)());
365+
void f(A);
366+
void g() { f(d<C>); }
367+
} // namespace adl_dependent_class

0 commit comments

Comments
 (0)