Author: mitchell Date: 2026-01-04T00:39:06+08:00 New Revision: e46b4e3e9db5e2b6eda24aeef248bbbc5d90e401
URL: https://github.com/llvm/llvm-project/commit/e46b4e3e9db5e2b6eda24aeef248bbbc5d90e401 DIFF: https://github.com/llvm/llvm-project/commit/e46b4e3e9db5e2b6eda24aeef248bbbc5d90e401.diff LOG: [clang-tidy] Fix false positive in bugprone-dynamic-static-initializers (#174275) Closes #145680 Added: Modified: clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/bugprone/dynamic-static-initializers.hpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp index 48de7fbe7fad6..d00c8d0ffb925 100644 --- a/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp @@ -18,12 +18,11 @@ namespace clang::tidy::bugprone { namespace { AST_MATCHER(clang::VarDecl, hasConstantDeclaration) { + if (Node.isConstexpr()) + return true; const Expr *Init = Node.getInit(); - if (Init && !Init->isValueDependent()) { - if (Node.isConstexpr()) - return true; + if (Init && !Init->isValueDependent()) return Node.evaluateValue(); - } return false; } diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index a154b4e08fae8..391c3a6b3db79 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -381,6 +381,11 @@ Changes in existing checks new option `IgnoreMacros` to suppress warnings within macro expansions. +- Improved :doc:`bugprone-dynamic-static-initializers + <clang-tidy/checks/bugprone/dynamic-static-initializers>` check by + avoiding false positives for ``constexpr`` variables whose + initializers are value-dependent. + - Improved :doc:`bugprone-easily-swappable-parameters <clang-tidy/checks/bugprone/easily-swappable-parameters>` check by correcting a spelling mistake on its option diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/dynamic-static-initializers.hpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/dynamic-static-initializers.hpp index 647b2e571655e..7a3211512fd84 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/dynamic-static-initializers.hpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/dynamic-static-initializers.hpp @@ -42,3 +42,24 @@ int foo3() { static int p = 7 + 83; // no warning return p; } + +namespace std { + template <typename T> + struct numeric_limits { + static constexpr T min() { return 0; } + static constexpr T max() { return 1000; } + }; +} + +template <typename T> +void template_func() { + static constexpr T local_kMin{std::numeric_limits<T>::min()}; // no warning +} + +template <int n> +struct TemplateStruct { + static constexpr int xn{n}; // no warning +}; + +template <typename T> +constexpr T kGlobalMin{std::numeric_limits<T>::min()}; // no warning _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
