summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 0ddf8b0a775..17e88b3512e 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -2407,9 +2407,10 @@ void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
CopyConstructor->setUsed();
}
-Expr *Sema::BuildCXXConstructExpr(QualType DeclInitType,
- CXXConstructorDecl *Constructor,
- Expr **Exprs, unsigned NumExprs) {
+Sema::OwningExprResult
+Sema::BuildCXXConstructExpr(QualType DeclInitType,
+ CXXConstructorDecl *Constructor,
+ Expr **Exprs, unsigned NumExprs) {
bool Elidable = false;
// [class.copy]p15:
@@ -2435,10 +2436,12 @@ Expr *Sema::BuildCXXConstructExpr(QualType DeclInitType,
/// BuildCXXConstructExpr - Creates a complete call to a constructor,
/// including handling of its default argument expressions.
-Expr *Sema::BuildCXXConstructExpr(QualType DeclInitType,
- CXXConstructorDecl *Constructor,
- bool Elidable,
- Expr **Exprs, unsigned NumExprs) {
+Sema::OwningExprResult
+Sema::BuildCXXConstructExpr(QualType DeclInitType,
+ CXXConstructorDecl *Constructor,
+ bool Elidable,
+ Expr **Exprs,
+ unsigned NumExprs) {
CXXConstructExpr *Temp = CXXConstructExpr::Create(Context, DeclInitType,
Constructor,
Elidable, Exprs, NumExprs);
@@ -2461,15 +2464,18 @@ Expr *Sema::BuildCXXConstructExpr(QualType DeclInitType,
Expr *Arg = CXXDefaultArgExpr::Create(Context, FDecl->getParamDecl(j));
Temp->setArg(j, Arg);
}
- return Temp;
+ return Owned(Temp);
}
void Sema::InitializeVarWithConstructor(VarDecl *VD,
CXXConstructorDecl *Constructor,
QualType DeclInitType,
Expr **Exprs, unsigned NumExprs) {
- Expr *Temp = BuildCXXConstructExpr(DeclInitType, Constructor,
- Exprs, NumExprs);
+ OwningExprResult TempResult = BuildCXXConstructExpr(DeclInitType, Constructor,
+ Exprs, NumExprs);
+ assert(!TempResult.isInvalid() && "FIXME: Error handling");
+
+ Expr *Temp = TempResult.takeAs<Expr>();
MarkDeclarationReferenced(VD->getLocation(), Constructor);
Temp = MaybeCreateCXXExprWithTemporaries(Temp, /*DestroyTemps=*/true);
VD->setInit(Context, Temp);
OpenPOWER on IntegriCloud