aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-07 22:23:31 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-07 22:23:31 +0000
commitf47511ab0575b8c4752e33cdc4b82a84dcc4d263 (patch)
tree96cf09f203d1804db383b37b5c7ff65e4a0a079e /lib
parentd851b37a331a7bc0047922ea9244aff85470987e (diff)
BuildCXXConstructExpr now takes a MultiExprArg.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81160 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Sema/Sema.h6
-rw-r--r--lib/Sema/SemaDecl.cpp3
-rw-r--r--lib/Sema/SemaDeclCXX.cpp21
-rw-r--r--lib/Sema/SemaExprCXX.cpp7
-rw-r--r--lib/Sema/SemaInit.cpp3
-rw-r--r--lib/Sema/TreeTransform.h4
6 files changed, 24 insertions, 20 deletions
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index ba466db77a..12cafe83c5 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -1810,14 +1810,14 @@ public:
bool InitializeVarWithConstructor(VarDecl *VD,
CXXConstructorDecl *Constructor,
QualType DeclInitType,
- Expr **Exprs, unsigned NumExprs);
+ MultiExprArg Exprs);
/// BuildCXXConstructExpr - Creates a complete call to a constructor,
/// including handling of its default argument expressions.
OwningExprResult BuildCXXConstructExpr(SourceLocation ConstructLoc,
QualType DeclInitType,
CXXConstructorDecl *Constructor,
- Expr **Exprs, unsigned NumExprs);
+ MultiExprArg Exprs);
// FIXME: Can re remove this and have the above BuildCXXConstructExpr check if
// the constructor can be elidable?
@@ -1825,7 +1825,7 @@ public:
QualType DeclInitType,
CXXConstructorDecl *Constructor,
bool Elidable,
- Expr **Exprs, unsigned NumExprs);
+ MultiExprArg Exprs);
OwningExprResult BuildCXXTemporaryObjectExpr(CXXConstructorDecl *Cons,
QualType writtenTy,
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 9809ea5501..d37f4485ff 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -3284,7 +3284,8 @@ void Sema::ActOnUninitializedDecl(DeclPtrTy dcl,
Var->setInvalidDecl();
else {
if (!RD->hasTrivialConstructor() || !RD->hasTrivialDestructor()) {
- if (InitializeVarWithConstructor(Var, Constructor, InitType, 0, 0))
+ if (InitializeVarWithConstructor(Var, Constructor, InitType,
+ MultiExprArg(*this)))
Var->setInvalidDecl();
}
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 89acfd14d6..8c5384b471 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -2809,8 +2809,8 @@ void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
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 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
//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 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
}
return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
- Elidable, Exprs, NumExprs);
+ Elidable, move(ExprArgs));
}
/// BuildCXXConstructExpr - Creates a complete call to a constructor,
@@ -2839,7 +2839,10 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
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 @@ Sema::BuildCXXTemporaryObjectExpr(CXXConstructorDecl *Constructor,
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 @@ void Sema::AddCXXDirectInitializerToDecl(DeclPtrTy Dcl,
else {
VDecl->setCXXDirectInitializer(true);
if (InitializeVarWithConstructor(VDecl, Constructor, DeclInitType,
- (Expr**)Exprs.release(), NumExprs))
+ move(Exprs)))
RealDecl->setInvalidDecl();
FinalizeVarWithDestructor(VDecl, DeclInitType);
}
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 1963f2ad7c..12f60b99c6 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -942,8 +942,8 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
DefaultFunctionArrayConversion(From);
OwningExprResult InitResult =
BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
- ToType.getNonReferenceType(),
- CD, &From, 1);
+ ToType.getNonReferenceType(), CD,
+ MultiExprArg(*this, (void**)&From, 1));
// Take ownership of this expression.
From = InitResult.takeAs<Expr>();
CastKind = CastExpr::CK_ConstructorConversion ;
@@ -988,7 +988,8 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
OwningExprResult FromResult =
BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
- ToType, SCS.CopyConstructor, &From, 1);
+ ToType, SCS.CopyConstructor,
+ MultiExprArg(*this, (void**)&From, 1));
if (FromResult.isInvalid())
return true;
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 936d996ea4..877efc31b9 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -182,7 +182,8 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType,
OwningExprResult InitResult =
BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
- DeclType, Constructor, &Init, 1);
+ DeclType, Constructor,
+ MultiExprArg(*this, (void**)&Init, 1));
if (InitResult.isInvalid())
return true;
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index a0642f92cb..02b402b77a 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -1448,12 +1448,10 @@ public:
CXXConstructorDecl *Constructor,
bool IsElidable,
MultiExprArg Args) {
- unsigned NumArgs = Args.size();
- Expr **ArgsExprs = (Expr **)Args.release();
return getSema().BuildCXXConstructExpr(/*FIXME:ConstructLoc*/
SourceLocation(),
T, Constructor, IsElidable,
- ArgsExprs, NumArgs);
+ move(Args));
}
/// \brief Build a new object-construction expression.