llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Oleksandr T. (a-tarasyuk) <details> <summary>Changes</summary> Fixes #<!-- -->95707 --- Full diff: https://github.com/llvm/llvm-project/pull/114813.diff 3 Files Affected: - (modified) clang/docs/ReleaseNotes.rst (+2) - (modified) clang/lib/Sema/SemaDecl.cpp (+5-2) - (added) clang/test/SemaCXX/cxx2b-warn-shadow.cpp (+10) ``````````diff diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 1372e49dfac03c..af8288ee8a8296 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -464,6 +464,8 @@ Improvements to Clang's diagnostics - Clang now diagnoses ``[[deprecated]]`` attribute usage on local variables (#GH90073). +- Clang now omits shadowing warnings for parameter names using deducing this (#GH95707). + Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 1aa3e8edfe1b13..38b07b15eb3eb2 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -8236,11 +8236,14 @@ void Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, DeclContext *NewDC = D->getDeclContext(); if (FieldDecl *FD = dyn_cast<FieldDecl>(ShadowedDecl)) { - // Fields are not shadowed by variables in C++ static methods. - if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC)) + if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC)) { + // Fields are not shadowed by variables in C++ static methods. if (MD->isStatic()) return; + if (!MD->getParent()->isLambda() && MD->isExplicitObjectMemberFunction()) + return; + } // Fields shadowed by constructor parameters are a special case. Usually // the constructor initializes the field with the parameter. if (isa<CXXConstructorDecl>(NewDC)) diff --git a/clang/test/SemaCXX/cxx2b-warn-shadow.cpp b/clang/test/SemaCXX/cxx2b-warn-shadow.cpp new file mode 100644 index 00000000000000..0cf47f3848979c --- /dev/null +++ b/clang/test/SemaCXX/cxx2b-warn-shadow.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -verify -fsyntax-only -std=c++2b -Wshadow-all %s + +namespace GH95707 { +struct Foo { + int a; // expected-note {{previous declaration is here}} + + void f1(this auto &self, int a) { self.a = a; } + void f2(int a) { } // expected-warning {{declaration shadows a field of 'GH95707::Foo'}} +}; +} // namespace GH95707 `````````` </details> https://github.com/llvm/llvm-project/pull/114813 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits