diff options
| author | Serge Pavlov <sepavloff@gmail.com> | 2014-06-20 17:08:28 +0000 |
|---|---|---|
| committer | Serge Pavlov <sepavloff@gmail.com> | 2014-06-20 17:08:28 +0000 |
| commit | eb57aa65dc8cc17ebb496808d78b437035bf6942 (patch) | |
| tree | 6eed80a1671323bf028ab81ac38430ad6eee5232 | |
| parent | 5ec80c2a85f8378354c86463ec21ef5a53d0106d (diff) | |
| download | bcm5719-llvm-eb57aa65dc8cc17ebb496808d78b437035bf6942.tar.gz bcm5719-llvm-eb57aa65dc8cc17ebb496808d78b437035bf6942.zip | |
Fix crash caused by unnamed union or struct when doing ast-print
llvm-svn: 211380
| -rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 8 | ||||
| -rw-r--r-- | clang/test/Coverage/c-language-features.inc | 12 |
2 files changed, 17 insertions, 3 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index db70cbe72de..0f4fd552461 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1274,10 +1274,12 @@ void StmtPrinter::VisitDesignatedInitExpr(DesignatedInitExpr *Node) { DEnd = Node->designators_end(); D != DEnd; ++D) { if (D->isFieldDesignator()) { - if (D->getDotLoc().isInvalid()) - OS << D->getFieldName()->getName() << ":"; - else + if (D->getDotLoc().isInvalid()) { + if (IdentifierInfo *II = D->getFieldName()) + OS << II->getName() << ":"; + } else { OS << "." << D->getFieldName()->getName(); + } } else { OS << "["; if (D->isArrayDesignator()) { diff --git a/clang/test/Coverage/c-language-features.inc b/clang/test/Coverage/c-language-features.inc index 0ff1237b12e..356687907d9 100644 --- a/clang/test/Coverage/c-language-features.inc +++ b/clang/test/Coverage/c-language-features.inc @@ -196,3 +196,15 @@ struct s11 { } f0; int f1; }; + +// Unnamed structures. +struct s12 { + struct { + unsigned char aa; + unsigned char bb; + }; +}; + +void f11() { + struct s12 var = { .aa = 33 }; +} |

