Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -6947,6 +6947,9 @@ const LookupResult &R) { DeclContext *NewDC = D->getDeclContext(); + if (D->getLocation().isMacroID()) + return; + if (FieldDecl *FD = dyn_cast(ShadowedDecl)) { // Fields are not shadowed by variables in C++ static methods. if (CXXMethodDecl *MD = dyn_cast(NewDC)) Index: test/SemaCXX/warn-shadow.cpp =================================================================== --- test/SemaCXX/warn-shadow.cpp +++ test/SemaCXX/warn-shadow.cpp @@ -168,6 +168,12 @@ using bob2=int; // expected-warning {{declaration shadows a type alias in the global namespace}} } +void macro() { + int x; +#define A(a) { int x = 0; } + A(1); +} + namespace rdar29067894 { void avoidWarningWhenRedefining(int b) { // expected-note {{previous definition is here}} @@ -199,13 +205,13 @@ using l=char; // no warning or error. using l=char; // no warning or error. typedef char l; // no warning or error. - - typedef char n; // no warning or error. + + typedef char n; // no warning or error. typedef char n; // no warning or error. using n=char; // no warning or error. } -} +} // namespace rdar29067894 extern "C" { typedef int externC; // expected-note {{previous declaration is here}}