On Wed, Jul 18, 2012 at 8:12 PM, Aaron Ballman <[email protected]>wrote:
> Author: aaronballman > Date: Wed Jul 18 22:12:23 2012 > New Revision: 160490 > > URL: http://llvm.org/viewvc/llvm-project?rev=160490&view=rev > Log: > Relaxed enumeration constant naming rules for scoped enumerators so they > no longer emit a diagnostic when the enumeration's name matches that of the > class. Fixes PR13128. > > Modified: > cfe/trunk/lib/Sema/SemaDecl.cpp > cfe/trunk/test/SemaCXX/enum-scoped.cpp > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=160490&r1=160489&r2=160490&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Jul 18 22:12:23 2012 > @@ -10406,15 +10406,21 @@ > } > } > > - // C++ [class.mem]p13: > - // If T is the name of a class, then each of the following shall have > a > - // name different from T: > - // - every enumerator of every member of class T that is an > enumerated > - // type > + // C++ [class.mem]p15: > + // If T is the name of a class, then each of the following shall have a > name > + // different from T: > + // - every enumerator of every member of class T that is an unscoped > + // enumerated type > + // > + // C++ [dcl.enum]p10: > + // Each enum-name and each unscoped enumerator is declared in the scope > that > + // immediately contains the enum-specifier. Each scoped enumerator is > declared > + // in the scope of the enumeration. > Is this quotation relevant here? (Sorry for not calling this out before.) > if (CXXRecordDecl *Record > = dyn_cast<CXXRecordDecl>( > > TheEnumDecl->getDeclContext()->getRedeclContext())) > - if (Record->getIdentifier() && Record->getIdentifier() == Id) > + if (!TheEnumDecl->isScoped() && > + Record->getIdentifier() && Record->getIdentifier() == Id) > Diag(IdLoc, diag::err_member_name_of_class) << Id; > > EnumConstantDecl *New = > > Modified: cfe/trunk/test/SemaCXX/enum-scoped.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/enum-scoped.cpp?rev=160490&r1=160489&r2=160490&view=diff > > ============================================================================== > --- cfe/trunk/test/SemaCXX/enum-scoped.cpp (original) > +++ cfe/trunk/test/SemaCXX/enum-scoped.cpp Wed Jul 18 22:12:23 2012 > @@ -245,3 +245,10 @@ > int m = g<int>(); > int n = g<short>(); // expected-note {{here}} > } > + > +namespace pr13128 { > + // This should compile cleanly > + class C { > + enum class E { C }; > + }; > +} > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
