r310674. Thanks!
On Thu, Aug 10, 2017 at 4:52 PM, Richard Smith <rich...@metafoo.co.uk> wrote: > Seems reasonable to me. > > On 10 August 2017 at 14:28, Hans Wennborg via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> >> Should we merge this to 5.0? >> >> On Mon, Jul 31, 2017 at 8:21 AM, Alexander Kornienko via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> > Author: alexfh >> > Date: Mon Jul 31 08:21:26 2017 >> > New Revision: 309569 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=309569&view=rev >> > Log: >> > Fix -Wshadow false positives with function-local classes. >> > >> > Summary: >> > Fixes http://llvm.org/PR33947. >> > >> > https://godbolt.org/g/54XRMT >> > >> > void f(int a) { >> > struct A { >> > void g(int a) {} >> > A() { int a; } >> > }; >> > } >> > >> > 3 : <source>:3:16: warning: declaration shadows a local variable >> > [-Wshadow] >> > void g(int a) {} >> > ^ >> > 1 : <source>:1:12: note: previous declaration is here >> > void f(int a) { >> > ^ >> > 4 : <source>:4:15: warning: declaration shadows a local variable >> > [-Wshadow] >> > A() { int a; } >> > ^ >> > 1 : <source>:1:12: note: previous declaration is here >> > void f(int a) { >> > ^ >> > 2 warnings generated. >> > >> > The local variable `a` of the function `f` can't be accessed from a >> > method of >> > the function-local class A, thus no shadowing occurs and no diagnostic >> > is >> > needed. >> > >> > Reviewers: rnk, rsmith, arphaman, Quuxplusone >> > >> > Reviewed By: rnk, Quuxplusone >> > >> > Subscribers: Quuxplusone, cfe-commits >> > >> > Differential Revision: https://reviews.llvm.org/D35941 >> > >> > Modified: >> > cfe/trunk/lib/Sema/SemaDecl.cpp >> > cfe/trunk/test/SemaCXX/warn-shadow.cpp >> > >> > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=309569&r1=309568&r2=309569&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) >> > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Jul 31 08:21:26 2017 >> > @@ -6999,6 +6999,21 @@ void Sema::CheckShadow(NamedDecl *D, Nam >> > return; >> > } >> > } >> > + >> > + if (cast<VarDecl>(ShadowedDecl)->hasLocalStorage()) { >> > + // A variable can't shadow a local variable in an enclosing >> > scope, if >> > + // they are separated by a non-capturing declaration context. >> > + for (DeclContext *ParentDC = NewDC; >> > + ParentDC && !ParentDC->Equals(OldDC); >> > + ParentDC = getLambdaAwareParentOfDeclContext(ParentDC)) { >> > + // Only block literals, captured statements, and lambda >> > expressions >> > + // can capture; other scopes don't. >> > + if (!isa<BlockDecl>(ParentDC) && !isa<CapturedDecl>(ParentDC) >> > && >> > + !isLambdaCallOperator(ParentDC)) { >> > + return; >> > + } >> > + } >> > + } >> > } >> > } >> > >> > >> > Modified: cfe/trunk/test/SemaCXX/warn-shadow.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-shadow.cpp?rev=309569&r1=309568&r2=309569&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/test/SemaCXX/warn-shadow.cpp (original) >> > +++ cfe/trunk/test/SemaCXX/warn-shadow.cpp Mon Jul 31 08:21:26 2017 >> > @@ -213,3 +213,12 @@ typedef int externC; // expected-note {{ >> > void handleLinkageSpec() { >> > typedef void externC; // expected-warning {{declaration shadows a >> > typedef in the global namespace}} >> > } >> > + >> > +namespace PR33947 { >> > +void f(int a) { >> > + struct A { >> > + void g(int a) {} >> > + A() { int a; } >> > + }; >> > +} >> > +} >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > cfe-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits