BuildCXXConstructExpr now takes a MultiExprArg.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81160 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 89acfd1..8c5384b 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -2809,8 +2809,8 @@
Sema::OwningExprResult
Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
- CXXConstructorDecl *Constructor,
- Expr **Exprs, unsigned NumExprs) {
+ CXXConstructorDecl *Constructor,
+ MultiExprArg ExprArgs) {
bool Elidable = false;
// [class.copy]p15:
@@ -2821,8 +2821,8 @@
//all, even if the class copy constructor or destructor have side effects.
// FIXME: Is this enough?
- if (Constructor->isCopyConstructor(Context) && NumExprs == 1) {
- Expr *E = Exprs[0];
+ if (Constructor->isCopyConstructor(Context) && ExprArgs.size() == 1) {
+ Expr *E = ((Expr **)ExprArgs.get())[0];
while (CXXBindTemporaryExpr *BE = dyn_cast<CXXBindTemporaryExpr>(E))
E = BE->getSubExpr();
@@ -2831,7 +2831,7 @@
}
return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
- Elidable, Exprs, NumExprs);
+ Elidable, move(ExprArgs));
}
/// BuildCXXConstructExpr - Creates a complete call to a constructor,
@@ -2839,7 +2839,10 @@
Sema::OwningExprResult
Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
CXXConstructorDecl *Constructor, bool Elidable,
- Expr **Exprs, unsigned NumExprs) {
+ MultiExprArg ExprArgs) {
+ unsigned NumExprs = ExprArgs.size();
+ Expr **Exprs = (Expr **)ExprArgs.release();
+
ExprOwningPtr<CXXConstructExpr> Temp(this,
CXXConstructExpr::Create(Context,
DeclInitType,
@@ -2897,10 +2900,10 @@
bool Sema::InitializeVarWithConstructor(VarDecl *VD,
CXXConstructorDecl *Constructor,
QualType DeclInitType,
- Expr **Exprs, unsigned NumExprs) {
+ MultiExprArg Exprs) {
OwningExprResult TempResult =
BuildCXXConstructExpr(VD->getLocation(), DeclInitType, Constructor,
- Exprs, NumExprs);
+ move(Exprs));
if (TempResult.isInvalid())
return true;
@@ -3003,7 +3006,7 @@
else {
VDecl->setCXXDirectInitializer(true);
if (InitializeVarWithConstructor(VDecl, Constructor, DeclInitType,
- (Expr**)Exprs.release(), NumExprs))
+ move(Exprs)))
RealDecl->setInvalidDecl();
FinalizeVarWithDestructor(VDecl, DeclInitType);
}