woot. Thanks! -eric
On Tue, Apr 23, 2013 at 3:47 AM, Richard Trieu <[email protected]> wrote: > Author: rtrieu > Date: Mon Apr 22 21:47:36 2013 > New Revision: 180076 > > URL: http://llvm.org/viewvc/llvm-project?rev=180076&view=rev > Log: > Warn that scoped enumerations are a C++11 extenstion when compiling in > C++98 mode. This improves on the previous diagnostic message of: > > error: expected identifier or '{' > > Modified: > cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > cfe/trunk/lib/Parse/ParseDecl.cpp > cfe/trunk/test/SemaCXX/warn-c++11-extensions.cpp > > Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=180076&r1=180075&r2=180076&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Mon Apr 22 21:47:36 > 2013 > @@ -688,6 +688,8 @@ def err_duplicate_virt_specifier : Error > > def err_scoped_enum_missing_identifier : Error< > "scoped enumeration requires a name">; > +def ext_scoped_enum : ExtWarn< > + "scoped enumerations are a C++11 extension">, InGroup<CXX11>; > def warn_cxx98_compat_scoped_enum : Warning< > "scoped enumerations are incompatible with C++98">, > InGroup<CXX98Compat>, DefaultIgnore; > > Modified: cfe/trunk/lib/Parse/ParseDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=180076&r1=180075&r2=180076&view=diff > ============================================================================== > --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) > +++ cfe/trunk/lib/Parse/ParseDecl.cpp Mon Apr 22 21:47:36 2013 > @@ -3367,9 +3367,9 @@ void Parser::ParseEnumSpecifier(SourceLo > bool IsScopedUsingClassTag = false; > > // In C++11, recognize 'enum class' and 'enum struct'. > - if (getLangOpts().CPlusPlus11 && > - (Tok.is(tok::kw_class) || Tok.is(tok::kw_struct))) { > - Diag(Tok, diag::warn_cxx98_compat_scoped_enum); > + if (Tok.is(tok::kw_class) || Tok.is(tok::kw_struct)) { > + Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum > + : diag::ext_scoped_enum); > IsScopedUsingClassTag = Tok.is(tok::kw_class); > ScopedEnumKWLoc = ConsumeToken(); > > > Modified: cfe/trunk/test/SemaCXX/warn-c++11-extensions.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-c%2B%2B11-extensions.cpp?rev=180076&r1=180075&r2=180076&view=diff > ============================================================================== > --- cfe/trunk/test/SemaCXX/warn-c++11-extensions.cpp (original) > +++ cfe/trunk/test/SemaCXX/warn-c++11-extensions.cpp Mon Apr 22 21:47:36 2013 > @@ -5,3 +5,5 @@ long long ll1 = // expected-warning {{'l > unsigned long long ull1 = // expected-warning {{'long long' is a C++11 > extension}} > 42ULL; // expected-warning {{'long long' is a C++11 > extension}} > > +enum struct E1 { A, B }; // expected-warning {{scoped enumerations are a > C++11 extension}} > +enum class E2 { C, D }; // expected-warning {{scoped enumerations are a > C++11 extension}} > > > _______________________________________________ > 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
