Author: cor3ntin Date: 2025-05-16T21:04:08+02:00 New Revision: efa28338d858e1ea2bf705d50a0404bc602c8fe1
URL: https://github.com/llvm/llvm-project/commit/efa28338d858e1ea2bf705d50a0404bc602c8fe1 DIFF: https://github.com/llvm/llvm-project/commit/efa28338d858e1ea2bf705d50a0404bc602c8fe1.diff LOG: [Clang] Fix a regression introduced by #140073 (#140288) Pointer to data member don't decay, assuming they do caused an assertion failure. Added: Modified: clang/include/clang/Sema/Overload.h clang/test/SemaCXX/overload-resolution-deferred-templates.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/Overload.h b/clang/include/clang/Sema/Overload.h index e88f764a0a601..a70335bef9dd4 100644 --- a/clang/include/clang/Sema/Overload.h +++ b/clang/include/clang/Sema/Overload.h @@ -435,7 +435,8 @@ class Sema; // A function pointer type can be resolved to a member function type, // which is still an identity conversion. - if (auto *N = T->getAs<MemberPointerType>()) + if (auto *N = T->getAs<MemberPointerType>(); + N && N->isMemberFunctionPointer()) T = C.getDecayedType(N->getPointeeType()); return T; }; diff --git a/clang/test/SemaCXX/overload-resolution-deferred-templates.cpp b/clang/test/SemaCXX/overload-resolution-deferred-templates.cpp index d559fb23ca043..4c5ac5dcbbd04 100644 --- a/clang/test/SemaCXX/overload-resolution-deferred-templates.cpp +++ b/clang/test/SemaCXX/overload-resolution-deferred-templates.cpp @@ -251,3 +251,26 @@ void f() { e.g(&N::f); } } + +#if __cplusplus >= 201402 +namespace PointerToMemData { +struct N { + int field; +}; +template <typename It, typename T> +struct B { + B(It, T); + template <typename It2> + B(B<It2, T>); +}; +template <typename T> +struct C { + auto g() { return B<int, T>(0, T{}); } +}; +void f() { + using T = decltype(C<decltype(&N::field)>{}.g()); +} + +} + +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits