Fix AST pretty-printing for C++ new expressions with placement arguments with default values.

Based on patch by Grzegorz Jablonski.

llvm-svn: 166226
This commit is contained in:
Eli Friedman 2012-10-18 20:54:37 +00:00
parent 9909415181
commit a6fdfaa595
2 changed files with 14 additions and 1 deletions

View File

@ -1415,10 +1415,12 @@ void StmtPrinter::VisitCXXNewExpr(CXXNewExpr *E) {
OS << "::"; OS << "::";
OS << "new "; OS << "new ";
unsigned NumPlace = E->getNumPlacementArgs(); unsigned NumPlace = E->getNumPlacementArgs();
if (NumPlace > 0) { if (NumPlace > 0 && !isa<CXXDefaultArgExpr>(E->getPlacementArg(0))) {
OS << "("; OS << "(";
PrintExpr(E->getPlacementArg(0)); PrintExpr(E->getPlacementArg(0));
for (unsigned i = 1; i < NumPlace; ++i) { for (unsigned i = 1; i < NumPlace; ++i) {
if (isa<CXXDefaultArgExpr>(E->getPlacementArg(i)))
break;
OS << ", "; OS << ", ";
PrintExpr(E->getPlacementArg(i)); PrintExpr(E->getPlacementArg(i));
} }

View File

@ -30,3 +30,14 @@ void f()
switch (int a = 1) { } switch (int a = 1) { }
} }
// CHECK: new (1) int;
void *operator new (typeof(sizeof(1)), int, int = 2);
void f2() {
new (1) int;
}
// CHECK: new X;
struct X {
void *operator new (typeof(sizeof(1)), int = 2);
};
void f2() { new X; }