forked from OSchip/llvm-project
PR43519: don't inject a diagnostic when constant-evaulation of a
pointer-to-member call can't determine a callee. We will have produced a diagnostic already if the callee is known to be unevaluatable, and diagnosing here rejects valid code during potential constant expression checking. llvm-svn: 373553
This commit is contained in:
parent
30c8df02ba
commit
5258202a81
|
@ -6845,8 +6845,11 @@ public:
|
|||
HasQualifier = ME->hasQualifier();
|
||||
} else if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(Callee)) {
|
||||
// Indirect bound member calls ('.*' or '->*').
|
||||
Member = dyn_cast_or_null<CXXMethodDecl>(
|
||||
HandleMemberPointerAccess(Info, BE, ThisVal, false));
|
||||
const ValueDecl *D =
|
||||
HandleMemberPointerAccess(Info, BE, ThisVal, false);
|
||||
if (!D)
|
||||
return false;
|
||||
Member = dyn_cast<CXXMethodDecl>(D);
|
||||
if (!Member)
|
||||
return Error(Callee);
|
||||
This = &ThisVal;
|
||||
|
|
|
@ -1108,6 +1108,11 @@ namespace MemberPointer {
|
|||
static_assert((int Derived::*)(int Mid<0>::*)&Mid<0>::n !=
|
||||
(int Derived::*)(int Mid<1>::*)&Mid<1>::n, "");
|
||||
static_assert(&Mid<0>::n == (int Mid<0>::*)&Base::n, "");
|
||||
|
||||
constexpr int apply(const A &a, int (A::*f)() const) {
|
||||
return (a.*f)();
|
||||
}
|
||||
static_assert(apply(A(2), &A::f) == 5, "");
|
||||
}
|
||||
|
||||
namespace ArrayBaseDerived {
|
||||
|
|
Loading…
Reference in New Issue