[cfe-commits] r162793 - in /cfe/trunk: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticParseKinds.td lib/Sema/DeclSpec.cpp test/Misc/warning-flags.c test/Parser/cxx-decl.cpp test/Parser/cxx0x-decl.cpp

Aaron Ballman aaron at aaronballman.com
Wed Aug 29 05:36:45 PDT 2012


Should be fixed in r162838

~Aaron

On Wed, Aug 29, 2012 at 8:15 AM, Aaron Ballman <aaron at aaronballman.com> wrote:
> On Wed, Aug 29, 2012 at 1:58 AM, Chandler Carruth <chandlerc at google.com> wrote:
>> On Tue, Aug 28, 2012 at 10:51 PM, Richard Smith <richard at metafoo.co.uk>
>> wrote:
>>>
>>>
>>> On 28 Aug 2012 21:58, "Aaron Ballman" <aaron at aaronballman.com> wrote:
>>> >
>>> > Author: aaronballman
>>> > Date: Tue Aug 28 15:55:40 2012
>>> > New Revision: 162793
>>> >
>>> > URL: http://llvm.org/viewvc/llvm-project?rev=162793&view=rev
>>> > Log:
>>> > Splitting the duplicated decl spec extension warning into two: one is an
>>> > ExtWarn and the other a vanilla warning.  This addresses PR13705, where
>>> > const char const * wouldn't warn unless -pedantic was specified under the
>>> > right conditions.
>>> >
>>> > Modified:
>>> >     cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>>> >     cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>>> >     cfe/trunk/lib/Sema/DeclSpec.cpp
>>> >     cfe/trunk/test/Misc/warning-flags.c
>>> >     cfe/trunk/test/Parser/cxx-decl.cpp
>>> >     cfe/trunk/test/Parser/cxx0x-decl.cpp
>>> >
>>> > Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=162793&r1=162792&r2=162793&view=diff
>>> >
>>> > ==============================================================================
>>> > --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
>>> > +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Tue Aug 28
>>> > 15:55:40 2012
>>> > @@ -197,6 +197,7 @@
>>> >  def StrncatSize : DiagGroup<"strncat-size">;
>>> >  def TautologicalCompare : DiagGroup<"tautological-compare">;
>>> >  def HeaderHygiene : DiagGroup<"header-hygiene">;
>>> > +def DuplicateDeclSpecifiers : DiagGroup<"duplicate-decl-specifiers">;
>>>
>>> It seems inconsistent to use a plural here and a singular in the warning
>>> text.
>>>
>>> >
>>> >  // Preprocessor warnings.
>>> >  def : DiagGroup<"builtin-macro-redefined">;
>>> >
>>> > Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=162793&r1=162792&r2=162793&view=diff
>>> >
>>> > ==============================================================================
>>> > --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
>>> > +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Aug 28
>>> > 15:55:40 2012
>>> > @@ -43,7 +43,10 @@
>>> >    "extra ';' after member function definition">,
>>> >    InGroup<ExtraSemi>, DefaultIgnore;
>>> >
>>> > -def ext_duplicate_declspec : Extension<"duplicate '%0' declaration
>>> > specifier">;
>>> > +def ext_duplicate_declspec : ExtWarn<"duplicate '%0' declaration
>>> > specifier">,
>>> > +  InGroup<DuplicateDeclSpecifiers>;
>>> > +def warn_duplicate_declspec : Warning<"duplicate '%0' declaration
>>> > specifier">,
>>> > +  InGroup<DuplicateDeclSpecifiers>;
>>> >  def ext_plain_complex : ExtWarn<
>>> >    "plain '_Complex' requires a type specifier; assuming '_Complex
>>> > double'">;
>>> >  def ext_integer_complex : Extension<
>>> >
>>> > Modified: cfe/trunk/lib/Sema/DeclSpec.cpp
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=162793&r1=162792&r2=162793&view=diff
>>> >
>>> > ==============================================================================
>>> > --- cfe/trunk/lib/Sema/DeclSpec.cpp (original)
>>> > +++ cfe/trunk/lib/Sema/DeclSpec.cpp Tue Aug 28 15:55:40 2012
>>> > @@ -325,10 +325,14 @@
>>> >
>>> >  template <class T> static bool BadSpecifier(T TNew, T TPrev,
>>> >                                              const char *&PrevSpec,
>>> > -                                            unsigned &DiagID) {
>>> > +                                            unsigned &DiagID,
>>> > +                                            bool IsExtension = true) {
>>> >    PrevSpec = DeclSpec::getSpecifierName(TPrev);
>>> > -  DiagID = (TNew == TPrev ? diag::ext_duplicate_declspec
>>> > -            : diag::err_invalid_decl_spec_combination);
>>> > +  if (TNew != TPrev)
>>> > +    DiagID = diag::err_invalid_decl_spec_combination;
>>> > +  else
>>> > +    DiagID = IsExtension ? diag::ext_duplicate_declspec :
>>> > +                           diag::warn_duplicate_declspec;
>>> >    return true;
>>> >  }
>>> >
>>> > @@ -673,9 +677,15 @@
>>> >                             unsigned &DiagID, const LangOptions &Lang,
>>> >                             bool IsTypeSpec) {
>>> >    // Duplicates are permitted in C99, and are permitted in C++11 unless
>>> > the
>>> > -  // cv-qualifier appears as a type-specifier.
>>> > -  if ((TypeQualifiers & T) && !Lang.C99 && (!Lang.CPlusPlus0x ||
>>> > IsTypeSpec))
>>> > -    return BadSpecifier(T, T, PrevSpec, DiagID);
>>> > +  // cv-qualifier appears as a type-specifier.  However, since this is
>>> > likely
>>> > +  // not what the user intended, we will always warn.  We do not need
>>> > to set the
>>> > +  // qualifier's location since we already have it.
>>> > +  if (TypeQualifiers & T) {
>>> > +    bool IsExtension = false;
>>> > +    if (Lang.C99 || (Lang.CPlusPlus0x && !IsTypeSpec))
>>> > +      IsExtension = true;
>>>
>>> Isn't this backwards? The warning is not an extension in C99 because the
>>> code is well-formed there.
>>
>>
>> Doh, sorry! I totally missed that in review...
>
> I'll correct and commit, good catch!
>
> ~Aaron



More information about the cfe-commits mailing list