diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-12-14 16:27:04 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-12-14 16:27:04 +0000 |
commit | db121bad2aeccac3f0e504b79e527efecef98a91 (patch) | |
tree | dcde8b68d5deebecf97cc98533738c49dfa67445 /clang/lib/Sema/TreeTransform.h | |
parent | 525dda05a0dfdfdb3ffce086bf8b3156b72dae21 (diff) | |
download | bcm5719-llvm-db121bad2aeccac3f0e504b79e527efecef98a91.tar.gz bcm5719-llvm-db121bad2aeccac3f0e504b79e527efecef98a91.zip |
When rebuilding CXXConstructExprs after a transformation, use
CompleteConstructorCall to perform type-checking.
llvm-svn: 91279
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index dc848a53ab5..b1d7f064894 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -1459,13 +1459,17 @@ public: /// By default, performs semantic analysis to build the new expression. /// Subclasses may override this routine to provide different behavior. OwningExprResult RebuildCXXConstructExpr(QualType T, + SourceLocation Loc, CXXConstructorDecl *Constructor, bool IsElidable, MultiExprArg Args) { - return getSema().BuildCXXConstructExpr(/*FIXME:ConstructLoc*/ - SourceLocation(), - T, Constructor, IsElidable, - move(Args)); + ASTOwningVector<&ActionBase::DeleteExpr> ConvertedArgs(SemaRef); + if (getSema().CompleteConstructorCall(Constructor, move(Args), Loc, + ConvertedArgs)) + return getSema().ExprError(); + + return getSema().BuildCXXConstructExpr(Loc, T, Constructor, IsElidable, + move_arg(ConvertedArgs)); } /// \brief Build a new object-construction expression. @@ -4723,7 +4727,8 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { !ArgumentChanged) return SemaRef.Owned(E->Retain()); - return getDerived().RebuildCXXConstructExpr(T, Constructor, E->isElidable(), + return getDerived().RebuildCXXConstructExpr(T, /*FIXME:*/E->getLocStart(), + Constructor, E->isElidable(), move_arg(Args)); } |