From eb57aa65dc8cc17ebb496808d78b437035bf6942 Mon Sep 17 00:00:00 2001 From: Serge Pavlov Date: Fri, 20 Jun 2014 17:08:28 +0000 Subject: [PATCH] Fix crash caused by unnamed union or struct when doing ast-print llvm-svn: 211380 --- clang/lib/AST/StmtPrinter.cpp | 8 +++++--- 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 db70cbe..0f4fd55 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 0ff1237..35668790 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 }; +} -- 2.7.4