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@+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>(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits