Author: Evgeny Shulgin Date: 2022-02-14T11:38:27+01:00 New Revision: fc84ebfff3a3dd373129f465f2ad5763ed4423c6
URL: https://github.com/llvm/llvm-project/commit/fc84ebfff3a3dd373129f465f2ad5763ed4423c6 DIFF: https://github.com/llvm/llvm-project/commit/fc84ebfff3a3dd373129f465f2ad5763ed4423c6.diff LOG: [clang-tidy] Ignore variable template partial specializations in `misc-definitions-in-headers` Variable template partial specializations are inline and can't lead to ODR-violations. The checker now ignores them. Fixes https://github.com/llvm/llvm-project/issues/53519 Reviewed By: hokein Differential Revision: https://reviews.llvm.org/D119098 Added: Modified: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers.hpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp index 411d6db582436..9a7a7e108b120 100644 --- a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -149,6 +149,9 @@ void DefinitionsInHeadersCheck::check(const MatchFinder::MatchResult &Result) { // Ignore inline variables. if (VD->isInline()) return; + // Ignore partial specializations. + if (isa<VarTemplatePartialSpecializationDecl>(VD)) + return; diag(VD->getLocation(), "variable %0 defined in a header file; " diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers.hpp b/clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers.hpp index c2a4a81ae3e16..f57cc2c256fef 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers.hpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers.hpp @@ -193,6 +193,16 @@ const int f12() { return 0; } // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: full function template specialization 'f12<int>' defined in a header file; // CHECK-FIXES: inline const int f12() { return 0; } +template <typename T1, typename T2> +constexpr bool f13 = false; + +template <typename T> +constexpr bool f13<T, int> = true; // OK: template partial specialization + +template <> +constexpr bool f13<void, int> = false; +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: variable 'f13<void, int>' defined in a header file; + int main() {} // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: function 'main' defined in a header file; // CHECK-FIXES: {{^}}int main() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits