diff options
author | Justin Bogner <mail@justinbogner.com> | 2015-05-28 22:19:36 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2015-05-28 22:19:36 +0000 |
commit | cb337035f2b145dbad697ba203bd43a6de32be46 (patch) | |
tree | 5d2bbd1b5f2d96ebe0d72cef2e10cbb009566656 /clang/lib/AST/StmtPrinter.cpp | |
parent | 2607a0d6551fc97d03e0b0f819d5a0eb096e013e (diff) | |
download | bcm5719-llvm-cb337035f2b145dbad697ba203bd43a6de32be46.tar.gz bcm5719-llvm-cb337035f2b145dbad697ba203bd43a6de32be46.zip |
AST: Fix printing GNU old-style field designators
Allows StmtPrinter to print old style field designators in
initializers, fixing an issue where we would print the following
invalid code:
struct A a = {b: = 3, .c = 4};
Patch by Nick Sumner. Thanks!
llvm-svn: 238517
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index dc4f9964c7a..cd65d729730 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1395,13 +1395,16 @@ void StmtPrinter::VisitParenListExpr(ParenListExpr* Node) { } void StmtPrinter::VisitDesignatedInitExpr(DesignatedInitExpr *Node) { + bool NeedsEquals = true; for (DesignatedInitExpr::designators_iterator D = Node->designators_begin(), DEnd = Node->designators_end(); D != DEnd; ++D) { if (D->isFieldDesignator()) { if (D->getDotLoc().isInvalid()) { - if (IdentifierInfo *II = D->getFieldName()) + if (IdentifierInfo *II = D->getFieldName()) { OS << II->getName() << ":"; + NeedsEquals = false; + } } else { OS << "." << D->getFieldName()->getName(); } @@ -1418,7 +1421,10 @@ void StmtPrinter::VisitDesignatedInitExpr(DesignatedInitExpr *Node) { } } - OS << " = "; + if (NeedsEquals) + OS << " = "; + else + OS << " "; PrintExpr(Node->getInit()); } |