When instantiating a new-expression, force a rebuild if there were default
arguments in either the placement or constructor arguments. This is
important if the default arguments refer to a declaration or create a
temporary.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115700 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 135ca46..5eac2cb 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -5278,6 +5278,11 @@
bool ArgumentChanged = false;
ASTOwningVector<Expr*> PlacementArgs(SemaRef);
for (unsigned I = 0, N = E->getNumPlacementArgs(); I != N; ++I) {
+ if (getDerived().DropCallArgument(E->getPlacementArg(I))) {
+ ArgumentChanged = true;
+ break;
+ }
+
ExprResult Arg = getDerived().TransformExpr(E->getPlacementArg(I));
if (Arg.isInvalid())
return ExprError();
@@ -5289,8 +5294,10 @@
// transform the constructor arguments (if any).
ASTOwningVector<Expr*> ConstructorArgs(SemaRef);
for (unsigned I = 0, N = E->getNumConstructorArgs(); I != N; ++I) {
- if (getDerived().DropCallArgument(E->getConstructorArg(I)))
+ if (getDerived().DropCallArgument(E->getConstructorArg(I))) {
+ ArgumentChanged = true;
break;
+ }
ExprResult Arg = getDerived().TransformExpr(E->getConstructorArg(I));
if (Arg.isInvalid())