forked from OSchip/llvm-project
Suppress -Wshadow / -Wold-style-cast expanded from system header macros
Thanks to Jonathan Sauer for providing initial test cases. Fixes PR16093 and PR18147. llvm-svn: 197150
This commit is contained in:
parent
cb5beb347a
commit
15ab37321c
|
@ -5599,6 +5599,8 @@ void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) {
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -5143,9 +5143,9 @@ Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc,
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue