summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2014-06-20 17:08:28 +0000
committerSerge Pavlov <sepavloff@gmail.com>2014-06-20 17:08:28 +0000
commiteb57aa65dc8cc17ebb496808d78b437035bf6942 (patch)
tree6eed80a1671323bf028ab81ac38430ad6eee5232
parent5ec80c2a85f8378354c86463ec21ef5a53d0106d (diff)
downloadbcm5719-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.cpp8
-rw-r--r--clang/test/Coverage/c-language-features.inc12
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 };
+}
OpenPOWER on IntegriCloud