On Sat, Feb 18, 2012 at 9:37 PM, Jianjiang Ceng < [email protected]> wrote:
> On Fri, Feb 17, 2012 at 11:56AM,"David Blaikie" <[email protected]>Wrote: > > > > On Fri, Feb 17, 2012 at 6:55 AM, Jianjiang Ceng > > <[email protected]> wrote: > > > Hi all, > > > > > > please find the attached patch which should fix the problem of parsing > > > tagged anonymous structs, when ms-extensions is enabled. > > > > > > The following code can be parsed by the MS C compiler and GCC, but > > > clang gave an error on couldn't resolve the anonymous struct member > > > "c". > > > > > > struct a { > > > struct b{ > > > int c; > > > }; > > > }; > > > > I'm not sure I understand where the anonymity is here - is there a > > mistake in your example? > > By default, GCC does not allow an anonymous struct to have a tag, i.e. > "b" in the example. If "-fms-extensions" is not enabled, GCC will > report that nothing is declared by the struct "b". > > Things are a little bit different when MS extensions are allowed, > anonymous structs can have tags. Since they, as member in other > structs, still lack a name, they are anonymous. Therefore, the struct > member "c" in the example should not be referenced by struct_a.b.c, > but struct_a.c. I believe this extension should be enabled by MicrosoftMode rather than MicrosoftExt, since it alters the behavior of valid C code. However, I note that gcc's -fms-extensions enables it. Clang code has a line length limit of 80 columns; your patch has some lines longer than 80 that. Also, your testcase has a mixture of tabs and spaces. Index: lib/Sema/SemaDecl.cpp @@ -2954,7 +2955,7 @@ SmallVector<NamedDecl*, 2> Chain; Chain.push_back(Anon); - RecordDecl *RecordDef = Record->getDefinition(); + RecordDecl *RecordDef = Record->isCompleteDefinition() ? Record : Record->getDefinition(); if (!RecordDef || InjectAnonymousStructOrUnionMembers(*this, S, CurContext, RecordDef, AS_none, Chain, true)) This change appears to be unnecessary. - Richard
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
