Author: Matheus Izvekov Date: 2025-03-22T12:12:24-03:00 New Revision: 5999be0f4770e9dd0f88ee9051a37119c8f5a1e4
URL: https://github.com/llvm/llvm-project/commit/5999be0f4770e9dd0f88ee9051a37119c8f5a1e4 DIFF: https://github.com/llvm/llvm-project/commit/5999be0f4770e9dd0f88ee9051a37119c8f5a1e4.diff LOG: [clang] fix RecursiveASTVisitor traversal from type to decl (#132551) Added: Modified: clang/include/clang/AST/RecursiveASTVisitor.h clang/test/SemaCXX/member-pointer.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index e93d1d8eab56f..0d5d515c0e6f7 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -1005,7 +1005,9 @@ DEF_TRAVERSE_TYPE(RValueReferenceType, DEF_TRAVERSE_TYPE(MemberPointerType, { TRY_TO(TraverseNestedNameSpecifier(T->getQualifier())); - TRY_TO(TraverseDecl(T->getMostRecentCXXRecordDecl())); + if (T->isSugared()) + TRY_TO(TraverseType( + QualType(T->getMostRecentCXXRecordDecl()->getTypeForDecl(), 0))); TRY_TO(TraverseType(T->getPointeeType())); }) diff --git a/clang/test/SemaCXX/member-pointer.cpp b/clang/test/SemaCXX/member-pointer.cpp index b6ab7d38610c8..3d9dd05755b8c 100644 --- a/clang/test/SemaCXX/member-pointer.cpp +++ b/clang/test/SemaCXX/member-pointer.cpp @@ -344,3 +344,14 @@ namespace GH132494 { }; template struct A<E>; // expected-note {{requested here}} } // namespace GH132494 + +namespace GH132401 { + template <typename Func> struct CallableHelper { + static auto Resolve() -> Func; + }; + struct QIODevice { + void d_func() { (void)d_ptr; } + int d_ptr; + }; + template struct CallableHelper<void (QIODevice::*)()>; +} // namespace GH132401 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits