From: Nico Weber Date: Wed, 1 Feb 2012 00:41:00 +0000 (+0000) Subject: Fix crash on invalid in microsoft anonymous struct extension. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee625afea71ef5a9c1e386564919b86915d96b0d;p=clang Fix crash on invalid in microsoft anonymous struct extension. Fixes PR11847. Patch from Jason Haslam! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149460 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index d545d03ac5..87bcfe9127 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2952,9 +2952,10 @@ Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS, SmallVector Chain; Chain.push_back(Anon); - if (InjectAnonymousStructOrUnionMembers(*this, S, CurContext, - Record->getDefinition(), - AS_none, Chain, true)) + RecordDecl *RecordDef = Record->getDefinition(); + if (!RecordDef || InjectAnonymousStructOrUnionMembers(*this, S, CurContext, + RecordDef, AS_none, + Chain, true)) Anon->setInvalidDecl(); return Anon; diff --git a/test/Sema/MicrosoftExtensions.c b/test/Sema/MicrosoftExtensions.c index 7438f7f5de..a08aeab99b 100644 --- a/test/Sema/MicrosoftExtensions.c +++ b/test/Sema/MicrosoftExtensions.c @@ -86,4 +86,13 @@ void pointer_to_integral_type_conv(char* ptr) { short sh = (short)ptr; ch = (char)ptr; sh = (short)ptr; -} +} + + +typedef struct { + UNKNOWN u; // expected-error {{unknown type name 'UNKNOWN'}} +} AA; + +typedef struct { + AA; // expected-warning {{anonymous structs are a Microsoft extension}} +} BB;