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

Reply via email to