[clang] efa2833 - [Clang] Fix a regression introduced by #140073 (#140288)
via cfe-commits
cfe-commits at lists.llvm.org
Fri May 16 12:04:11 PDT 2025
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
More information about the cfe-commits
mailing list