summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-08-14 18:30:22 +0000
committerAnders Carlsson <andersca@mac.com>2009-08-14 18:30:22 +0000
commite827123f081a39402470ab1371275af209aecbb4 (patch)
treeb7f95103b5495347ecf99772b21ccf55c54b6997 /clang
parent52b7f0ad5fb0b19025e78f23a922abad33578aba (diff)
downloadbcm5719-llvm-e827123f081a39402470ab1371275af209aecbb4.tar.gz
bcm5719-llvm-e827123f081a39402470ab1371275af209aecbb4.zip
Make the CXXDefaultArgExpr constructor protected and add a static Create function.
llvm-svn: 79013
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/AST/ExprCXX.h16
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp2
-rw-r--r--clang/lib/Sema/SemaExpr.cpp2
-rw-r--r--clang/lib/Sema/SemaOverload.cpp2
-rw-r--r--clang/lib/Sema/TreeTransform.h2
5 files changed, 15 insertions, 9 deletions
diff --git a/clang/include/clang/AST/ExprCXX.h b/clang/include/clang/AST/ExprCXX.h
index c80169269bb..0f1354754b3 100644
--- a/clang/include/clang/AST/ExprCXX.h
+++ b/clang/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/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index c452c05f0f6..a8afa4f1de2 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/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/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index e9b1dd486ac..ced300b4d73 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/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/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index d7d2610742c..faf4d82a8b1 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/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/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 6b1c12bfa8e..3be044ca91b 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/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.
OpenPOWER on IntegriCloud