diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-02-05 07:02:11 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-02-05 07:02:11 +0000 |
commit | ed83ebd77e12e561d435574fbe093a220f270e4e (patch) | |
tree | e3650f69e384d49e014b196a97e44923ccd09407 /clang/lib/AST/StmtPrinter.cpp | |
parent | 6956e2e68338f62bd19d54b82f0791a8f626c84d (diff) | |
download | bcm5719-llvm-ed83ebd77e12e561d435574fbe093a220f270e4e.tar.gz bcm5719-llvm-ed83ebd77e12e561d435574fbe093a220f270e4e.zip |
PR22465: when performing list-initialization for a class type C, if we see an
initializer of the form {x}, where x is of type C or a type derived from C,
perform *non-list* initialization of the entity from x, but create a
CXXConstructExpr that knows that we used list-initialization syntax.
Plus some fixes to ensure we mangle correctly in this and related cases.
llvm-svn: 228276
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 621c7a5e7eb..d6e0debee14 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1694,7 +1694,9 @@ void StmtPrinter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *Node) { void StmtPrinter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *Node) { Node->getType().print(OS, Policy); - if (Node->isListInitialization()) + if (Node->isStdInitListInitialization()) + /* Nothing to do; braces are part of creating the std::initializer_list. */; + else if (Node->isListInitialization()) OS << "{"; else OS << "("; @@ -1707,7 +1709,9 @@ void StmtPrinter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *Node) { OS << ", "; PrintExpr(*Arg); } - if (Node->isListInitialization()) + if (Node->isStdInitListInitialization()) + /* See above. */; + else if (Node->isListInitialization()) OS << "}"; else OS << ")"; @@ -1876,7 +1880,7 @@ void StmtPrinter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { } void StmtPrinter::VisitCXXConstructExpr(CXXConstructExpr *E) { - if (E->isListInitialization()) + if (E->isListInitialization() && !E->isStdInitListInitialization()) OS << "{"; for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) { @@ -1889,7 +1893,7 @@ void StmtPrinter::VisitCXXConstructExpr(CXXConstructExpr *E) { PrintExpr(E->getArg(i)); } - if (E->isListInitialization()) + if (E->isListInitialization() && !E->isStdInitListInitialization()) OS << "}"; } |