From: Anders Carlsson Date: Fri, 14 Aug 2009 18:30:22 +0000 (+0000) Subject: Make the CXXDefaultArgExpr constructor protected and add a static Create function. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1480eee38b59d15438fb7bc50865ac7c7e22403;p=clang Make the CXXDefaultArgExpr constructor protected and add a static Create function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79013 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/ExprCXX.h b/include/clang/AST/ExprCXX.h index c80169269b..0f1354754b 100644 --- a/include/clang/AST/ExprCXX.h +++ b/include/clang/AST/ExprCXX.h @@ -382,14 +382,20 @@ public: /// supply arguments for all of the parameters. class CXXDefaultArgExpr : public Expr { ParmVarDecl *Param; + +protected: + CXXDefaultArgExpr(StmtClass SC, ParmVarDecl *param) + : Expr(SC, param->hasUnparsedDefaultArg() ? + param->getType().getNonReferenceType() + : param->getDefaultArg()->getType()), + Param(param) { } + public: // Param is the parameter whose default argument is used by this // expression. - explicit CXXDefaultArgExpr(ParmVarDecl *param) - : Expr(CXXDefaultArgExprClass, - param->hasUnparsedDefaultArg()? param->getType().getNonReferenceType() - : param->getDefaultArg()->getType()), - Param(param) { } + static CXXDefaultArgExpr *Create(ASTContext &C, ParmVarDecl *Param) { + return new (C) CXXDefaultArgExpr(CXXDefaultArgExprClass, Param); + } // Retrieve the parameter that the argument was created from. const ParmVarDecl *getParam() const { return Param; } diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index c452c05f0f..a8afa4f1de 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -2394,7 +2394,7 @@ Expr *Sema::BuildCXXConstructExpr(ASTContext &C, for (unsigned I = 0, N = E->getNumTemporaries(); I != N; ++I) ExprTemporaries.push_back(E->getTemporary(I)); } - Expr *Arg = new (C) CXXDefaultArgExpr(FDecl->getParamDecl(j)); + Expr *Arg = CXXDefaultArgExpr::Create(C, FDecl->getParamDecl(j)); Temp->setArg(j, Arg); } return Temp; diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index e9b1dd486a..ced300b4d7 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2657,7 +2657,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, } // We already type-checked the argument, so we know it works. - Arg = new (Context) CXXDefaultArgExpr(FDecl->getParamDecl(i)); + Arg = CXXDefaultArgExpr::Create(Context, FDecl->getParamDecl(i)); } QualType ArgType = Arg->getType(); diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index d7d2610742..faf4d82a8b 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -4531,7 +4531,7 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object, QualType ProtoArgType = Proto->getArgType(i); IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing"); } else { - Arg = new (Context) CXXDefaultArgExpr(Method->getParamDecl(i)); + Arg = CXXDefaultArgExpr::Create(Context, Method->getParamDecl(i)); } TheCall->setArg(i + 1, Arg); diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 6b1c12bfa8..3be044ca91 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -1021,7 +1021,7 @@ public: /// require any semantic analysis. Subclasses may override this routine to /// provide different behavior. OwningExprResult RebuildCXXDefaultArgExpr(ParmVarDecl *Param) { - return getSema().Owned(new (getSema().Context) CXXDefaultArgExpr(Param)); + return getSema().Owned(CXXDefaultArgExpr::Create(getSema().Context, Param)); } /// \brief Build a new C++ zero-initialization expression.