<div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 28, 2012 at 10:51 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank" class="cremed">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><p dir="ltr"><br>
On 28 Aug 2012 21:58, "Aaron Ballman" <<a href="mailto:aaron@aaronballman.com" target="_blank" class="cremed">aaron@aaronballman.com</a>> wrote:<br>
><br>
> Author: aaronballman<br>
> Date: Tue Aug 28 15:55:40 2012<br>
> New Revision: 162793<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=162793&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=162793&view=rev</a><br>
> Log:<br>
> 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.<br>
><br>
> Modified:<br>
> Â Â cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>
> Â Â cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
> Â Â cfe/trunk/lib/Sema/DeclSpec.cpp<br>
> Â Â cfe/trunk/test/Misc/warning-flags.c<br>
> Â Â cfe/trunk/test/Parser/cxx-decl.cpp<br>
> Â Â cfe/trunk/test/Parser/cxx0x-decl.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=162793&r1=162792&r2=162793&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=162793&r1=162792&r2=162793&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)<br>
> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Tue Aug 28 15:55:40 2012<br>
> @@ -197,6 +197,7 @@<br>
> Â def StrncatSize : DiagGroup<"strncat-size">;<br>
> Â def TautologicalCompare : DiagGroup<"tautological-compare">;<br>
> Â def HeaderHygiene : DiagGroup<"header-hygiene">;<br>
> +def DuplicateDeclSpecifiers : DiagGroup<"duplicate-decl-specifiers">;</p>
</div><p dir="ltr">It seems inconsistent to use a plural here and a singular in the warning text.</p><div><div class="h5">
<p dir="ltr">><br>
> Â // Preprocessor warnings.<br>
> Â def : DiagGroup<"builtin-macro-redefined">;<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=162793&r1=162792&r2=162793&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=162793&r1=162792&r2=162793&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)<br>
> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Aug 28 15:55:40 2012<br>
> @@ -43,7 +43,10 @@<br>
> Â Â "extra ';' after member function definition">,<br>
> Â Â InGroup<ExtraSemi>, DefaultIgnore;<br>
><br>
> -def ext_duplicate_declspec : Extension<"duplicate '%0' declaration specifier">;<br>
> +def ext_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">,<br>
> + Â InGroup<DuplicateDeclSpecifiers>;<br>
> +def warn_duplicate_declspec : Warning<"duplicate '%0' declaration specifier">,<br>
> + Â InGroup<DuplicateDeclSpecifiers>;<br>
> Â def ext_plain_complex : ExtWarn<<br>
> Â Â "plain '_Complex' requires a type specifier; assuming '_Complex double'">;<br>
> Â def ext_integer_complex : Extension<<br>
><br>
> Modified: cfe/trunk/lib/Sema/DeclSpec.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=162793&r1=162792&r2=162793&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=162793&r1=162792&r2=162793&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/DeclSpec.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/DeclSpec.cpp Tue Aug 28 15:55:40 2012<br>
> @@ -325,10 +325,14 @@<br>
><br>
> Â template <class T> static bool BadSpecifier(T TNew, T TPrev,<br>
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â const char *&PrevSpec,<br>
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â unsigned &DiagID) {<br>
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â unsigned &DiagID,<br>
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â bool IsExtension = true) {<br>
> Â Â PrevSpec = DeclSpec::getSpecifierName(TPrev);<br>
> - Â DiagID = (TNew == TPrev ? diag::ext_duplicate_declspec<br>
> - Â Â Â Â Â Â : diag::err_invalid_decl_spec_combination);<br>
> + Â if (TNew != TPrev)<br>
> + Â Â DiagID = diag::err_invalid_decl_spec_combination;<br>
> + Â else<br>
> + Â Â DiagID = IsExtension ? diag::ext_duplicate_declspec :<br>
> + Â Â Â Â Â Â Â Â Â Â Â Â Â diag::warn_duplicate_declspec;<br>
> Â Â return true;<br>
> Â }<br>
><br>
> @@ -673,9 +677,15 @@<br>
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â unsigned &DiagID, const LangOptions &Lang,<br>
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â bool IsTypeSpec) {<br>
> Â Â // Duplicates are permitted in C99, and are permitted in C++11 unless the<br>
> - Â // cv-qualifier appears as a type-specifier.<br>
> - Â if ((TypeQualifiers & T) && !Lang.C99 && (!Lang.CPlusPlus0x || IsTypeSpec))<br>
> - Â Â return BadSpecifier(T, T, PrevSpec, DiagID);<br>
> + Â // cv-qualifier appears as a type-specifier. Â However, since this is likely<br>
> + Â // not what the user intended, we will always warn. Â We do not need to set the<br>
> + Â // qualifier's location since we already have it.<br>
> + Â if (TypeQualifiers & T) {<br>
> + Â Â bool IsExtension = false;<br>
> + Â Â if (Lang.C99 || (Lang.CPlusPlus0x && !IsTypeSpec))<br>
> + Â Â Â IsExtension = true;</p>
</div></div><p dir="ltr">Isn't this backwards? The warning is not an extension in C99 because the code is well-formed there.</p></blockquote><div><br></div><div>Doh, sorry! I totally missed that in review... </div></div>
</div>