зеркало из https://github.com/microsoft/clang-1.git
Create CXXMemberCallExpr for pointer-to-member calls.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83268 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
26bc220377
Коммит
83ccfc3cf0
|
@ -2902,6 +2902,28 @@ Sema::ActOnCallExpr(Scope *S, ExprArg fn, SourceLocation LParenLoc,
|
|||
return Owned(BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs,
|
||||
CommaLocs, RParenLoc));
|
||||
}
|
||||
|
||||
// Determine whether this is a call to a pointer-to-member function.
|
||||
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Fn->IgnoreParens())) {
|
||||
if (BO->getOpcode() == BinaryOperator::PtrMemD ||
|
||||
BO->getOpcode() == BinaryOperator::PtrMemI) {
|
||||
const FunctionProtoType *FPT = cast<FunctionProtoType>(BO->getType());
|
||||
QualType ReturnTy = FPT->getResultType();
|
||||
|
||||
CXXMemberCallExpr *CE =
|
||||
new (Context) CXXMemberCallExpr(Context, BO, Args, NumArgs,
|
||||
ReturnTy.getNonReferenceType(),
|
||||
RParenLoc);
|
||||
|
||||
ExprOwningPtr<CXXMemberCallExpr> TheCall(this, CE);
|
||||
|
||||
if (ConvertArgumentsForCall(&*TheCall, BO, 0, FPT, Args, NumArgs,
|
||||
RParenLoc))
|
||||
return ExprError();
|
||||
|
||||
return Owned(MaybeBindToTemporary(TheCall.release()).release());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we're directly calling a function, get the appropriate declaration.
|
||||
|
|
Загрузка…
Ссылка в новой задаче