[cfe-commits] r150144 - in /cfe/trunk: lib/Sema/SemaInit.cpp test/Sema/init.c
Aaron Ballman
aaron at aaronballman.com
Wed Feb 8 19:29:07 PST 2012
Author: aaronballman
Date: Wed Feb 8 21:29:06 2012
New Revision: 150144
URL: http://llvm.org/viewvc/llvm-project?rev=150144&view=rev
Log:
Attempting to initialize a union member that does not exist no longer crashes.
Patch by Remi Gacogne
Modified:
cfe/trunk/lib/Sema/SemaInit.cpp
cfe/trunk/test/Sema/init.c
Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=150144&r1=150143&r2=150144&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Wed Feb 8 21:29:06 2012
@@ -1511,7 +1511,8 @@
IdentifierInfo *FieldName) {
assert(AnonField->isAnonymousStructOrUnion());
Decl *NextDecl = AnonField->getNextDeclInContext();
- while (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(NextDecl)) {
+ IndirectFieldDecl *IF = NULL;
+ while (NextDecl && (IF = dyn_cast<IndirectFieldDecl>(NextDecl))) {
if (FieldName && FieldName == IF->getAnonField()->getIdentifier())
return IF;
NextDecl = NextDecl->getNextDeclInContext();
Modified: cfe/trunk/test/Sema/init.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/init.c?rev=150144&r1=150143&r2=150144&view=diff
==============================================================================
--- cfe/trunk/test/Sema/init.c (original)
+++ cfe/trunk/test/Sema/init.c Wed Feb 8 21:29:06 2012
@@ -18,10 +18,19 @@
void *g = &x;
int *h = &x;
+struct union_crash
+{
+ union
+ {
+ };
+};
+
int test() {
-int a[10];
-int b[10] = a; // expected-error {{array initializer must be an initializer list}}
-int +; // expected-error {{expected identifier or '('}}
+ int a[10];
+ int b[10] = a; // expected-error {{array initializer must be an initializer list}}
+ int +; // expected-error {{expected identifier or '('}}
+
+ struct union_crash u = { .d = 1 }; // expected-error {{field designator 'd' does not refer to any field in type 'struct union_crash'}}
}
More information about the cfe-commits
mailing list