r191370 - Sema: Simplify code a bit, plug a potential leak.
Benjamin Kramer
benny.kra at googlemail.com
Wed Sep 25 06:10:12 PDT 2013
Author: d0k
Date: Wed Sep 25 08:10:11 2013
New Revision: 191370
URL: http://llvm.org/viewvc/llvm-project?rev=191370&view=rev
Log:
Sema: Simplify code a bit, plug a potential leak.
No intended functionality change.
Modified:
cfe/trunk/lib/Sema/SemaOverload.cpp
Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=191370&r1=191369&r2=191370&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOverload.cpp Wed Sep 25 08:10:11 2013
@@ -11392,21 +11392,7 @@ Sema::BuildCallToObjectOfClassType(Scope
Method->getType()->getAs<FunctionProtoType>();
unsigned NumArgsInProto = Proto->getNumArgs();
- unsigned NumArgsToCheck = Args.size();
-
- // Build the full argument list for the method call (the
- // implicit object parameter is placed at the beginning of the
- // list).
- Expr **MethodArgs;
- if (Args.size() < NumArgsInProto) {
- NumArgsToCheck = NumArgsInProto;
- MethodArgs = new Expr*[NumArgsInProto + 1];
- } else {
- MethodArgs = new Expr*[Args.size() + 1];
- }
- MethodArgs[0] = Object.get();
- for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
- MethodArgs[ArgIdx + 1] = Args[ArgIdx];
+ unsigned NumArgsToCheck = std::max<unsigned>(Args.size(), NumArgsInProto);
DeclarationNameInfo OpLocInfo(
Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
@@ -11418,17 +11404,23 @@ Sema::BuildCallToObjectOfClassType(Scope
if (NewFn.isInvalid())
return true;
+ // Build the full argument list for the method call (the implicit object
+ // parameter is placed at the beginning of the list).
+ llvm::OwningArrayPtr<Expr *> MethodArgs(new Expr*[Args.size() + 1]);
+ MethodArgs[0] = Object.get();
+ std::copy(Args.begin(), Args.end(), &MethodArgs[1]);
+
// Once we've built TheCall, all of the expressions are properly
// owned.
QualType ResultTy = Method->getResultType();
ExprValueKind VK = Expr::getValueKindForType(ResultTy);
ResultTy = ResultTy.getNonLValueExprType(Context);
- CXXOperatorCallExpr *TheCall =
- new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
- llvm::makeArrayRef(MethodArgs, Args.size()+1),
- ResultTy, VK, RParenLoc, false);
- delete [] MethodArgs;
+ CXXOperatorCallExpr *TheCall = new (Context)
+ CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
+ llvm::makeArrayRef(MethodArgs.get(), Args.size() + 1),
+ ResultTy, VK, RParenLoc, false);
+ MethodArgs.reset();
if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
Method))
More information about the cfe-commits
mailing list