From: Anders Carlsson Date: Sat, 15 Aug 2009 23:41:35 +0000 (+0000) Subject: BuildCXXConstructExpr doesn't need to take an ASTContext. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=089c2602ebaccdda271beaabdd32575b354d4d09;p=clang BuildCXXConstructExpr doesn't need to take an ASTContext. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79149 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 943231811b..fab6bcf604 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -1692,12 +1692,13 @@ public: /// BuildCXXConstructExpr - Creates a complete call to a constructor, /// including handling of its default argument expressions. - Expr * BuildCXXConstructExpr(ASTContext &C, - QualType DeclInitType, - CXXConstructorDecl *Constructor, - bool Elidable, - Expr **Exprs, unsigned NumExprs); + Expr *BuildCXXConstructExpr(QualType DeclInitType, + CXXConstructorDecl *Constructor, + bool Elidable, + Expr **Exprs, unsigned NumExprs); + Expr *BuildCXXCopyConstructExpr(Expr *Expr); + /// FinalizeVarWithDestructor - Prepare for calling destructor on the /// constructed variable. void FinalizeVarWithDestructor(VarDecl *VD, QualType DeclInitType); diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 889d5c91ca..d460950824 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -2379,12 +2379,11 @@ void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation, /// BuildCXXConstructExpr - Creates a complete call to a constructor, /// including handling of its default argument expressions. -Expr *Sema::BuildCXXConstructExpr(ASTContext &C, - QualType DeclInitType, +Expr *Sema::BuildCXXConstructExpr(QualType DeclInitType, CXXConstructorDecl *Constructor, bool Elidable, Expr **Exprs, unsigned NumExprs) { - CXXConstructExpr *Temp = CXXConstructExpr::Create(C, DeclInitType, + CXXConstructExpr *Temp = CXXConstructExpr::Create(Context, DeclInitType, Constructor, Elidable, Exprs, NumExprs); // default arguments must be added to constructor call expression. @@ -2403,7 +2402,7 @@ Expr *Sema::BuildCXXConstructExpr(ASTContext &C, for (unsigned I = 0, N = E->getNumTemporaries(); I != N; ++I) ExprTemporaries.push_back(E->getTemporary(I)); } - Expr *Arg = CXXDefaultArgExpr::Create(C, FDecl->getParamDecl(j)); + Expr *Arg = CXXDefaultArgExpr::Create(Context, FDecl->getParamDecl(j)); Temp->setArg(j, Arg); } return Temp; @@ -2413,8 +2412,7 @@ void Sema::InitializeVarWithConstructor(VarDecl *VD, CXXConstructorDecl *Constructor, QualType DeclInitType, Expr **Exprs, unsigned NumExprs) { - Expr *Temp = BuildCXXConstructExpr(Context, - DeclInitType, Constructor, + Expr *Temp = BuildCXXConstructExpr(DeclInitType, Constructor, false, Exprs, NumExprs); MarkDeclarationReferenced(VD->getLocation(), Constructor); Temp = MaybeCreateCXXExprWithTemporaries(Temp, /*DestroyTemps=*/true); diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 20f69069a5..274893b99e 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -905,8 +905,8 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType, // FIXME: Keep track of whether the copy constructor is elidable or not. bool Elidable = (isa(From) || isa(From)); - From = BuildCXXConstructExpr(Context, ToType, - SCS.CopyConstructor, Elidable, &From, 1); + From = BuildCXXConstructExpr(ToType, SCS.CopyConstructor, + Elidable, &From, 1); return false; } @@ -1558,6 +1558,9 @@ QualType Sema::FindCompositePointerType(Expr *&E1, Expr *&E2) { } Sema::OwningExprResult Sema::MaybeBindToTemporary(Expr *E) { + if (!Context.getLangOptions().CPlusPlus) + return Owned(E); + const RecordType *RT = E->getType()->getAs(); if (!RT) return Owned(E); diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 1e564ce45f..f734d9347a 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -178,8 +178,7 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType, return true; bool Elidable = (isa(Init) || isa(Init)); - Init = BuildCXXConstructExpr(Context, - DeclType, Constructor, Elidable, &Init, 1); + Init = BuildCXXConstructExpr(DeclType, Constructor, Elidable, &Init, 1); Init = MaybeCreateCXXExprWithTemporaries(Init, /*DestroyTemps=*/true); return false; } diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 3be044ca91..51db2167d9 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -1173,8 +1173,7 @@ public: MultiExprArg Args) { unsigned NumArgs = Args.size(); Expr **ArgsExprs = (Expr **)Args.release(); - return getSema().Owned(SemaRef.BuildCXXConstructExpr(getSema().Context, T, - Constructor, + return getSema().Owned(SemaRef.BuildCXXConstructExpr(T, Constructor, IsElidable, ArgsExprs, NumArgs));