forked from OSchip/llvm-project
Check the return type when calling pointer to member functions.
llvm-svn: 84161
This commit is contained in:
parent
3254182bfa
commit
63dce02544
|
@ -2917,15 +2917,18 @@ Sema::ActOnCallExpr(Scope *S, ExprArg fn, SourceLocation LParenLoc,
|
|||
if (BO->getOpcode() == BinaryOperator::PtrMemD ||
|
||||
BO->getOpcode() == BinaryOperator::PtrMemI) {
|
||||
const FunctionProtoType *FPT = cast<FunctionProtoType>(BO->getType());
|
||||
QualType ReturnTy = FPT->getResultType();
|
||||
QualType ResultTy = FPT->getResultType().getNonReferenceType();
|
||||
|
||||
CXXMemberCallExpr *CE =
|
||||
new (Context) CXXMemberCallExpr(Context, BO, Args, NumArgs,
|
||||
ReturnTy.getNonReferenceType(),
|
||||
RParenLoc);
|
||||
|
||||
ExprOwningPtr<CXXMemberCallExpr> TheCall(this, CE);
|
||||
ExprOwningPtr<CXXMemberCallExpr>
|
||||
TheCall(this, new (Context) CXXMemberCallExpr(Context, BO, Args,
|
||||
NumArgs, ResultTy,
|
||||
RParenLoc));
|
||||
|
||||
if (CheckCallReturnType(FPT->getResultType(),
|
||||
BO->getRHS()->getSourceRange().getBegin(),
|
||||
TheCall.get(), 0))
|
||||
return ExprError();
|
||||
|
||||
if (ConvertArgumentsForCall(&*TheCall, BO, 0, FPT, Args, NumArgs,
|
||||
RParenLoc))
|
||||
return ExprError();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: clang-cc -fsyntax-only -verify %s
|
||||
struct A; // expected-note 13 {{forward declaration of 'struct A'}}
|
||||
struct A; // expected-note 14 {{forward declaration of 'struct A'}}
|
||||
|
||||
A f(); // expected-note {{note: 'f' declared here}}
|
||||
|
||||
|
@ -35,4 +35,8 @@ void g() {
|
|||
b[0]; // expected-error {{calling 'operator[]' with incomplete return type 'struct A'}}
|
||||
b + 1; // expected-error {{calling 'operator+' with incomplete return type 'struct A'}}
|
||||
b->f(); // expected-error {{calling 'operator->' with incomplete return type 'struct A'}}
|
||||
|
||||
A (B::*mfp)() = 0;
|
||||
(b.*mfp)(); // expected-error {{calling function with incomplete return type 'struct A'}}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue