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

Alp Toker alp at nuanti.com
Thu Dec 12 04:47:48 PST 2013


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;
   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





More information about the cfe-commits mailing list