r197150 - Suppress -Wshadow / -Wold-style-cast expanded from system header macros

Alp Toker alp at nuanti.com
Thu Dec 12 05:04:29 PST 2013


On 12/12/2013 12:47, Alp Toker wrote:
> Author: alp
> Date: Thu Dec 12 06:47:48 2013
> New Revision: 197150
>
> URL: http://llvm.org/viewvc/llvm-project?rev=197150&view=rev
> Log:
> Suppress -Wshadow / -Wold-style-cast expanded from system header macros
>
> Thanks to Jonathan Sauer for providing initial test cases.
>
> Fixes PR16093 and PR18147.
>
> Added:
>      cfe/trunk/test/SemaCXX/warn-sysheader-macro.cpp
> Modified:
>      cfe/trunk/lib/Sema/SemaDecl.cpp
>      cfe/trunk/lib/Sema/SemaExpr.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=197150&r1=197149&r2=197150&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Dec 12 06:47:48 2013
> @@ -5599,6 +5599,8 @@ void Sema::CheckShadow(Scope *S, VarDecl
>     DeclarationName Name = R.getLookupName();
>   
>     // Emit warning and note.
> +  if (getSourceManager().isInSystemMacro(R.getNameLoc()))
> +    return;


Incidentally, isInSystemMacro() calls are scattered all over the place 
right now to suppress various warnings.

It'd be great to replace those with a diagnostic TableGen bit indicating 
which warning groups are meant to be suppressed when expanded from a 
system macro.

(Would save a few cycles to delay the check until emission time, and 
would let us make the suppression conditional on -Wsystem-header.)

Aaron, as resident TableGen guru do you have an idea what it'd take to 
get that set up? :-)

Alp.



>     Diag(R.getNameLoc(), diag::warn_decl_shadow) << Name << Kind << OldDC;
>     Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
>   }
>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=197150&r1=197149&r2=197150&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Dec 12 06:47:48 2013
> @@ -5143,9 +5143,9 @@ Sema::ActOnCastExpr(Scope *S, SourceLoca
>       CastExpr = Result.take();
>     }
>   
> -  if (getLangOpts().CPlusPlus && !castType->isVoidType())
> -    Diag(CastExpr->getLocStart(), diag::warn_old_style_cast)
> -        << SourceRange(LParenLoc, RParenLoc);
> +  if (getLangOpts().CPlusPlus && !castType->isVoidType() &&
> +      !getSourceManager().isInSystemMacro(LParenLoc))
> +    Diag(LParenLoc, diag::warn_old_style_cast) << CastExpr->getSourceRange();
>   
>     return BuildCStyleCastExpr(LParenLoc, castTInfo, RParenLoc, CastExpr);
>   }
>
> Added: cfe/trunk/test/SemaCXX/warn-sysheader-macro.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-sysheader-macro.cpp?rev=197150&view=auto
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/warn-sysheader-macro.cpp (added)
> +++ cfe/trunk/test/SemaCXX/warn-sysheader-macro.cpp Thu Dec 12 06:47:48 2013
> @@ -0,0 +1,35 @@
> +// RUN: %clang_cc1 -verify -fsyntax-only -Wshadow -Wold-style-cast %s
> +
> +// Test that macro expansions from system headers don't trigger 'syntactic'
> +// warnings that are not actionable.
> +
> +#ifdef IS_SYSHEADER
> +#pragma clang system_header
> +
> +#define SANITY(a) (a / 0)
> +
> +#define SHADOW(a) __extension__({ int v = a; v; })
> +
> +#define OLD_STYLE_CAST(a) ((int) (a))
> +
> +#else
> +
> +#define IS_SYSHEADER
> +#include __FILE__
> +
> +void testSanity() {
> +  // Validate that the test is set up correctly
> +  int i = SANITY(0); // expected-warning {{division by zero is undefined}}
> +}
> +
> +void PR16093() {
> +  // no -Wshadow in system macro expansion
> +  int i = SHADOW(SHADOW(1));
> +}
> +
> +void PR18147() {
> +  // no -Wold_style_cast in system macro expansion
> +  int i = OLD_STYLE_CAST(0);
> +}
> +
> +#endif
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list