diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 2960183eb8c5f..32cc7c94a3252 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -342,6 +342,8 @@ Improvements to Clang's diagnostics with ``__attribute__((cleanup(...)))`` to match GCC's behavior. - Clang now issues expected warnings for situations of comparing with NULL pointers. (`#42992: `_) +- Clang now diagnoses unused const-qualified variable template as + "unused variable template" rather than "unused variable". Bug Fixes in This Version ------------------------- diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index e6507d8808011..09084176cbf41 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -1380,6 +1380,9 @@ void Sema::ActOnEndOfTranslationUnit() { if (DiagD->isReferenced()) { Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) << /*variable*/ 1 << DiagD; + } else if (DiagD->getDescribedVarTemplate()) { + Diag(DiagD->getLocation(), diag::warn_unused_template) + << /*variable*/ 1 << DiagD; } else if (DiagD->getType().isConstQualified()) { const SourceManager &SM = SourceMgr; if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || @@ -1387,11 +1390,7 @@ void Sema::ActOnEndOfTranslationUnit() { Diag(DiagD->getLocation(), diag::warn_unused_const_variable) << DiagD; } else { - if (DiagD->getDescribedVarTemplate()) - Diag(DiagD->getLocation(), diag::warn_unused_template) - << /*variable*/ 1 << DiagD; - else - Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD; + Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD; } } } diff --git a/clang/test/SemaCXX/warn-unused-filescoped.cpp b/clang/test/SemaCXX/warn-unused-filescoped.cpp index d53608003b16d..be8d350855c07 100644 --- a/clang/test/SemaCXX/warn-unused-filescoped.cpp +++ b/clang/test/SemaCXX/warn-unused-filescoped.cpp @@ -155,8 +155,7 @@ namespace test5 { int y = sizeof(d); namespace { - // FIXME: Should be "unused variable template 'var_t'" instead. - template const double var_t = 0; // expected-warning {{unused variable 'var_t'}} + template const double var_t = 0; // expected-warning {{unused variable template 'var_t'}} template <> const double var_t = 0; // expected-warning {{variable 'var_t' is not needed and will not be emitted}} int z = sizeof(var_t); // expected-warning {{unused variable 'z'}} } // namespace