[clang] af464c6 - [Clang][diagnostics] Fix structured binding shadows template param loc (#129116)

via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 3 10:22:31 PST 2025


Author: Amr Hesham
Date: 2025-03-03T19:22:28+01:00
New Revision: af464c6d53c1873101e312048d35d1daed27e407

URL: https://github.com/llvm/llvm-project/commit/af464c6d53c1873101e312048d35d1daed27e407
DIFF: https://github.com/llvm/llvm-project/commit/af464c6d53c1873101e312048d35d1daed27e407.diff

LOG: [Clang][diagnostics] Fix structured binding shadows template param loc (#129116)

Fix structured binding shadows template parameter location

Fixes: #129060

Added: 
    

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/lib/Sema/SemaDeclCXX.cpp
    clang/test/CXX/temp/temp.res/temp.local/p6.cpp

Removed: 
    


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 08fafa00d5452..688d50a394c62 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -220,6 +220,8 @@ Improvements to Clang's diagnostics
   :doc:`ThreadSafetyAnalysis` still does not perform alias analysis. The
   feature will be default-enabled with ``-Wthread-safety`` in a future release.
 
+- Improve the diagnostics for shadows template parameter to report correct location (#GH129060).
+
 Improvements to Clang's time-trace
 ----------------------------------
 

diff  --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 664d48ccbc382..a3a028b9485d6 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -883,8 +883,7 @@ Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D,
     // It's not permitted to shadow a template parameter name.
     if (Previous.isSingleResult() &&
         Previous.getFoundDecl()->isTemplateParameter()) {
-      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
-                                      Previous.getFoundDecl());
+      DiagnoseTemplateParameterShadow(B.NameLoc, Previous.getFoundDecl());
       Previous.clear();
     }
 

diff  --git a/clang/test/CXX/temp/temp.res/temp.local/p6.cpp b/clang/test/CXX/temp/temp.res/temp.local/p6.cpp
index 00bb35813c39a..205df5fa25870 100644
--- a/clang/test/CXX/temp/temp.res/temp.local/p6.cpp
+++ b/clang/test/CXX/temp/temp.res/temp.local/p6.cpp
@@ -162,3 +162,14 @@ struct A {
 };
 A<0>::B a;
 }
+
+template <typename T> int shadow() {  // expected-note{{template parameter is declared here}}
+  using arr = int[1];
+  // expected-warning at +1 {{decomposition declarations are a C++17 extension}}
+  auto [
+    T // expected-error {{declaration of 'T' shadows template parameter}}
+    ] = arr{};
+  return 0;
+}
+
+auto Use = shadow<int>();


        


More information about the cfe-commits mailing list