[clang-tools-extra] 1e1e11a - Revert "[clang-tidy] add modernize-use-std-numbers (#66583)"
Piotr Zegar via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 6 10:59:34 PST 2023
Author: Piotr Zegar
Date: 2023-12-06T18:59:25Z
New Revision: 1e1e11a4d7c57028953a23deae622acab5eee9ff
URL: https://github.com/llvm/llvm-project/commit/1e1e11a4d7c57028953a23deae622acab5eee9ff
DIFF: https://github.com/llvm/llvm-project/commit/1e1e11a4d7c57028953a23deae622acab5eee9ff.diff
LOG: Revert "[clang-tidy] add modernize-use-std-numbers (#66583)"
Compilation issue, to be resolved.
This reverts commit 3f73fd774cf8fc2f288767ea077bfa351eb7aa80.
Added:
Modified:
clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/list.rst
Removed:
clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.h
clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-numbers.rst
clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-numbers.cpp
################################################################################
diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
index 28ca52f46943a..c40065358d2dc 100644
--- a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
@@ -39,7 +39,6 @@ add_clang_library(clangTidyModernizeModule
UseNullptrCheck.cpp
UseOverrideCheck.cpp
UseStartsEndsWithCheck.cpp
- UseStdNumbersCheck.cpp
UseStdPrintCheck.cpp
UseTrailingReturnTypeCheck.cpp
UseTransparentFunctorsCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
index 654f4bd0c6ba4..e994ffd2a75c8 100644
--- a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
@@ -40,7 +40,6 @@
#include "UseNullptrCheck.h"
#include "UseOverrideCheck.h"
#include "UseStartsEndsWithCheck.h"
-#include "UseStdNumbersCheck.h"
#include "UseStdPrintCheck.h"
#include "UseTrailingReturnTypeCheck.h"
#include "UseTransparentFunctorsCheck.h"
@@ -70,8 +69,6 @@ class ModernizeModule : public ClangTidyModule {
CheckFactories.registerCheck<PassByValueCheck>("modernize-pass-by-value");
CheckFactories.registerCheck<UseStartsEndsWithCheck>(
"modernize-use-starts-ends-with");
- CheckFactories.registerCheck<UseStdNumbersCheck>(
- "modernize-use-std-numbers");
CheckFactories.registerCheck<UseStdPrintCheck>("modernize-use-std-print");
CheckFactories.registerCheck<RawStringLiteralCheck>(
"modernize-raw-string-literal");
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.cpp
deleted file mode 100644
index 1f2b034713ecf..0000000000000
--- a/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.cpp
+++ /dev/null
@@ -1,449 +0,0 @@
-//===--- UseStdNumbersCheck.cpp - clang_tidy ------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX_License_Identifier: Apache_2.0 WITH LLVM_exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "UseStdNumbersCheck.h"
-#include "../ClangTidyDiagnosticConsumer.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/AST/Decl.h"
-#include "clang/AST/Expr.h"
-#include "clang/AST/Stmt.h"
-#include "clang/AST/Type.h"
-#include "clang/ASTMatchers/ASTMatchFinder.h"
-#include "clang/ASTMatchers/ASTMatchers.h"
-#include "clang/ASTMatchers/ASTMatchersInternal.h"
-#include "clang/ASTMatchers/ASTMatchersMacros.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/LLVM.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Lex/Lexer.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/FormatVariadic.h"
-#include "llvm/Support/MathExtras.h"
-#include <array>
-#include <cstdint>
-#include <cstdlib>
-#include <initializer_list>
-#include <string>
-#include <tuple>
-#include <utility>
-
-namespace {
-using namespace clang::ast_matchers;
-using clang::ast_matchers::internal::Matcher;
-using llvm::StringRef;
-
-AST_MATCHER_P2(clang::FloatingLiteral, near, double, Value, double,
- DiffThreshold) {
- return std::abs(Node.getValueAsApproximateDouble() - Value) < DiffThreshold;
-}
-
-AST_MATCHER_P(clang::QualType, hasCanonicalTypeUnqualified,
- Matcher<clang::QualType>, InnerMatcher) {
- return !Node.isNull() &&
- InnerMatcher.matches(Node->getCanonicalTypeUnqualified(), Finder,
- Builder);
-}
-
-AST_MATCHER(clang::QualType, isArithmetic) {
- return !Node.isNull() && Node->isArithmeticType();
-}
-AST_MATCHER(clang::QualType, isFloating) {
- return !Node.isNull() && Node->isFloatingType();
-}
-
-AST_MATCHER_P(clang::Expr, anyOfExhaustive,
- llvm::ArrayRef<Matcher<clang::Stmt>>, Exprs) {
- bool FoundMatch = false;
- for (const auto &InnerMatcher : Exprs) {
- clang::ast_matchers::internal::BoundNodesTreeBuilder Result = *Builder;
- if (InnerMatcher.matches(Node, Finder, &Result)) {
- *Builder = std::move(Result);
- FoundMatch = true;
- }
- }
- return FoundMatch;
-}
-
-// Using this struct to store the 'DiffThreshold' config value to create the
-// matchers without the need to pass 'DiffThreshold' into every matcher.
-// 'DiffThreshold' is needed in the 'near' matcher, which is used for matching
-// the literal of every constant and for formulas' subexpressions that look at
-// literals.
-struct MatchBuilder {
- auto
- ignoreParenAndArithmeticCasting(const Matcher<clang::Expr> Matcher) const {
- return expr(hasType(qualType(isArithmetic())), ignoringParenCasts(Matcher));
- }
-
- auto ignoreParenAndFloatingCasting(const Matcher<clang::Expr> Matcher) const {
- return expr(hasType(qualType(isFloating())), ignoringParenCasts(Matcher));
- }
-
- auto matchMathCall(const StringRef FunctionName,
- const Matcher<clang::Expr> ArgumentMatcher) const {
- return expr(ignoreParenAndFloatingCasting(
- callExpr(callee(functionDecl(hasName(FunctionName),
- hasParameter(0, hasType(isArithmetic())))),
- hasArgument(0, ArgumentMatcher))));
- }
-
- auto matchSqrt(const Matcher<clang::Expr> ArgumentMatcher) const {
- return matchMathCall("sqrt", ArgumentMatcher);
- }
-
- // Used for top-level matchers (i.e. the match that replaces Val with its
- // constant).
- //
- // E.g. The matcher of `std::numbers::pi` uses this matcher to look for
- // floatLiterals that have the value of pi.
- //
- // If the match is for a top-level match, we only care about the literal.
- auto matchFloatLiteralNear(const StringRef Constant, const double Val) const {
- return expr(ignoreParenAndFloatingCasting(
- floatLiteral(near(Val, DiffThreshold)).bind(Constant)));
- }
-
- // Used for non-top-level matchers (i.e. matchers that are used as inner
- // matchers for top-level matchers).
- //
- // E.g.: The matcher of `std::numbers::log2e` uses this matcher to check if
- // `e` of `log2(e)` is declared constant and initialized with the value for
- // eulers number.
- //
- // Here, we do care about literals and about DeclRefExprs to variable
- // declarations that are constant and initialized with `Val`. This allows
- // top-level matchers to see through declared constants for their inner
- // matches like the `std::numbers::log2e` matcher.
- auto matchFloatValueNear(const double Val) const {
- const auto Float = floatLiteral(near(Val, DiffThreshold));
-
- const auto Dref = declRefExpr(
- to(varDecl(hasType(qualType(isConstQualified(), isFloating())),
- hasInitializer(ignoreParenAndFloatingCasting(Float)))));
- return expr(ignoreParenAndFloatingCasting(anyOf(Float, Dref)));
- }
-
- auto matchValue(const int64_t ValInt) const {
- const auto Int =
- expr(ignoreParenAndArithmeticCasting(integerLiteral(equals(ValInt))));
- const auto Float = expr(ignoreParenAndFloatingCasting(
- matchFloatValueNear(static_cast<double>(ValInt))));
- const auto Dref = declRefExpr(to(varDecl(
- hasType(qualType(isConstQualified(), isArithmetic())),
- hasInitializer(expr(anyOf(ignoringImplicit(Int),
- ignoreParenAndFloatingCasting(Float)))))));
- return expr(anyOf(Int, Float, Dref));
- }
-
- auto match1Div(const Matcher<clang::Expr> Match) const {
- return binaryOperator(hasOperatorName("/"), hasLHS(matchValue(1)),
- hasRHS(Match));
- }
-
- auto matchEuler() const {
- return expr(anyOf(matchFloatValueNear(llvm::numbers::e),
- matchMathCall("exp", matchValue(1))));
- }
- auto matchEulerTopLevel() const {
- return expr(anyOf(matchFloatLiteralNear("e_literal", llvm::numbers::e),
- matchMathCall("exp", matchValue(1)).bind("e_pattern")))
- .bind("e");
- }
-
- auto matchLog2Euler() const {
- return expr(
- anyOf(
- matchFloatLiteralNear("log2e_literal", llvm::numbers::log2e),
- matchMathCall("log2", matchEuler()).bind("log2e_pattern")))
- .bind("log2e");
- }
-
- auto matchLog10Euler() const {
- return expr(
- anyOf(
- matchFloatLiteralNear("log10e_literal",
- llvm::numbers::log10e),
- matchMathCall("log10", matchEuler()).bind("log10e_pattern")))
- .bind("log10e");
- }
-
- auto matchPi() const { return matchFloatValueNear(llvm::numbers::pi); }
- auto matchPiTopLevel() const {
- return matchFloatLiteralNear("pi_literal", llvm::numbers::pi).bind("pi");
- }
-
- auto matchEgamma() const {
- return matchFloatLiteralNear("egamma_literal", llvm::numbers::egamma)
- .bind("egamma");
- }
-
- auto matchInvPi() const {
- return expr(anyOf(matchFloatLiteralNear("inv_pi_literal",
- llvm::numbers::inv_pi),
- match1Div(matchPi()).bind("inv_pi_pattern")))
- .bind("inv_pi");
- }
-
- auto matchInvSqrtPi() const {
- return expr(anyOf(
- matchFloatLiteralNear("inv_sqrtpi_literal",
- llvm::numbers::inv_sqrtpi),
- match1Div(matchSqrt(matchPi())).bind("inv_sqrtpi_pattern")))
- .bind("inv_sqrtpi");
- }
-
- auto matchLn2() const {
- return expr(anyOf(matchFloatLiteralNear("ln2_literal", llvm::numbers::ln2),
- matchMathCall("log", matchValue(2)).bind("ln2_pattern")))
- .bind("ln2");
- }
-
- auto machterLn10() const {
- return expr(
- anyOf(matchFloatLiteralNear("ln10_literal", llvm::numbers::ln10),
- matchMathCall("log", matchValue(10)).bind("ln10_pattern")))
- .bind("ln10");
- }
-
- auto matchSqrt2() const {
- return expr(anyOf(matchFloatLiteralNear("sqrt2_literal",
- llvm::numbers::sqrt2),
- matchSqrt(matchValue(2)).bind("sqrt2_pattern")))
- .bind("sqrt2");
- }
-
- auto matchSqrt3() const {
- return expr(anyOf(matchFloatLiteralNear("sqrt3_literal",
- llvm::numbers::sqrt3),
- matchSqrt(matchValue(3)).bind("sqrt3_pattern")))
- .bind("sqrt3");
- }
-
- auto matchInvSqrt3() const {
- return expr(anyOf(matchFloatLiteralNear("inv_sqrt3_literal",
- llvm::numbers::inv_sqrt3),
- match1Div(matchSqrt(matchValue(3)))
- .bind("inv_sqrt3_pattern")))
- .bind("inv_sqrt3");
- }
-
- auto matchPhi() const {
- const auto PhiFormula = binaryOperator(
- hasOperatorName("/"),
- hasLHS(binaryOperator(
- hasOperatorName("+"), hasEitherOperand(matchValue(1)),
- hasEitherOperand(matchMathCall("sqrt", matchValue(5))))),
- hasRHS(matchValue(2)));
- return expr(anyOf(PhiFormula.bind("phi_pattern"),
- matchFloatLiteralNear("phi_literal", llvm::numbers::phi)))
- .bind("phi");
- }
-
- double DiffThreshold;
-};
-
-std::string getCode(const StringRef Constant, const bool IsFloat,
- const bool IsLongDouble) {
- if (IsFloat) {
- return ("std::numbers::" + Constant + "_v<float>").str();
- }
- if (IsLongDouble) {
- return ("std::numbers::" + Constant + "_v<long double>").str();
- }
- return ("std::numbers::" + Constant).str();
-}
-
-bool isRangeOfCompleteMacro(const clang::SourceRange &Range,
- const clang::SourceManager &SM,
- const clang::LangOptions &LO) {
- if (!Range.getBegin().isMacroID()) {
- return false;
- }
- if (!clang::Lexer::isAtStartOfMacroExpansion(Range.getBegin(), SM, LO)) {
- return false;
- }
-
- if (!Range.getEnd().isMacroID()) {
- return false;
- }
-
- if (!clang::Lexer::isAtEndOfMacroExpansion(Range.getEnd(), SM, LO)) {
- return false;
- }
-
- return true;
-}
-
-} // namespace
-
-namespace clang::tidy::modernize {
-UseStdNumbersCheck::UseStdNumbersCheck(const StringRef Name,
- ClangTidyContext *const Context)
- : ClangTidyCheck(Name, Context),
- IncludeInserter(Options.getLocalOrGlobal("IncludeStyle",
- utils::IncludeSorter::IS_LLVM),
- areDiagsSelfContained()),
- DiffThresholdString{Options.get("DiffThreshold", "0.001")} {
- if (DiffThresholdString.getAsDouble(DiffThreshold)) {
- configurationDiag(
- "Invalid DiffThreshold config value: '%0', expected a double")
- << DiffThresholdString;
- DiffThreshold = 0.001;
- }
-}
-
-void UseStdNumbersCheck::registerMatchers(MatchFinder *const Finder) {
- const auto Matches = MatchBuilder{DiffThreshold};
- static const auto ConstantMatchers = {
- Matches.matchLog2Euler(), Matches.matchLog10Euler(),
- Matches.matchEulerTopLevel(), Matches.matchEgamma(),
- Matches.matchInvSqrtPi(), Matches.matchInvPi(),
- Matches.matchPiTopLevel(), Matches.matchLn2(),
- Matches.machterLn10(), Matches.matchSqrt2(),
- Matches.matchInvSqrt3(), Matches.matchSqrt3(),
- Matches.matchPhi(),
- };
-
- Finder->addMatcher(
- expr(
- anyOfExhaustive(ConstantMatchers),
- unless(hasParent(explicitCastExpr(hasDestinationType(isFloating())))),
- hasType(qualType(hasCanonicalTypeUnqualified(
- anyOf(qualType(asString("float")).bind("float"),
- qualType(asString("double")),
- qualType(asString("long double")).bind("long double")))))),
- this);
-}
-
-void UseStdNumbersCheck::check(const MatchFinder::MatchResult &Result) {
- /*
- List of all math constants in the `<numbers>` header
- + e
- + log2e
- + log10e
- + pi
- + inv_pi
- + inv_sqrtpi
- + ln2
- + ln10
- + sqrt2
- + sqrt3
- + inv_sqrt3
- + egamma
- + phi
- */
-
- // The ordering determines what constants are looked at first.
- // E.g. look at 'inv_sqrt3' before 'sqrt3' to be able to replace the larger
- // expression
- constexpr auto Constants = std::array<std::pair<StringRef, double>, 13>{
- std::pair{StringRef{"log2e"}, llvm::numbers::log2e},
- std::pair{StringRef{"log10e"}, llvm::numbers::log10e},
- std::pair{StringRef{"e"}, llvm::numbers::e},
- std::pair{StringRef{"egamma"}, llvm::numbers::egamma},
- std::pair{StringRef{"inv_sqrtpi"}, llvm::numbers::inv_sqrtpi},
- std::pair{StringRef{"inv_pi"}, llvm::numbers::inv_pi},
- std::pair{StringRef{"pi"}, llvm::numbers::pi},
- std::pair{StringRef{"ln2"}, llvm::numbers::ln2},
- std::pair{StringRef{"ln10"}, llvm::numbers::ln10},
- std::pair{StringRef{"sqrt2"}, llvm::numbers::sqrt2},
- std::pair{StringRef{"inv_sqrt3"}, llvm::numbers::inv_sqrt3},
- std::pair{StringRef{"sqrt3"}, llvm::numbers::sqrt3},
- std::pair{StringRef{"phi"}, llvm::numbers::phi},
- };
-
- auto MatchedLiterals =
- llvm::SmallVector<std::tuple<std::string, double, const Expr *>>{};
-
- const auto &SM = *Result.SourceManager;
- const auto &LO = Result.Context->getLangOpts();
-
- const auto IsFloat = Result.Nodes.getNodeAs<QualType>("float") != nullptr;
- const auto IsLongDouble =
- Result.Nodes.getNodeAs<QualType>("long double") != nullptr;
-
- for (const auto &[ConstantName, ConstantValue] : Constants) {
- const auto *const Match = Result.Nodes.getNodeAs<Expr>(ConstantName);
- if (Match == nullptr) {
- continue;
- }
-
- const auto Range = Match->getSourceRange();
-
- const auto IsMacro = Range.getBegin().isMacroID();
-
- // We do not want to emit a diagnostic when we are matching a macro, but the
- // match inside of the macro does not cover the whole macro.
- if (IsMacro && !isRangeOfCompleteMacro(Range, SM, LO)) {
- continue;
- }
-
- if (const auto PatternBindString = (ConstantName + "_pattern").str();
- Result.Nodes.getNodeAs<Expr>(PatternBindString) != nullptr) {
- const auto Code = getCode(ConstantName, IsFloat, IsLongDouble);
- diag(Range.getBegin(), "prefer '%0' to this %select{formula|macro}1")
- << Code << IsMacro << FixItHint::CreateReplacement(Range, Code);
- return;
- }
-
- const auto LiteralBindString = (ConstantName + "_literal").str();
- if (const auto *const Literal =
- Result.Nodes.getNodeAs<FloatingLiteral>(LiteralBindString)) {
- MatchedLiterals.emplace_back(
- ConstantName,
- std::abs(Literal->getValueAsApproximateDouble() - ConstantValue),
- Match);
- }
- }
-
- // We may have had no matches with literals, but a match with a pattern that
- // was a part of a macro which was therefore skipped.
- if (MatchedLiterals.empty()) {
- return;
- }
-
- llvm::sort(MatchedLiterals, [](const auto &LHS, const auto &RHS) {
- return std::get<1>(LHS) < std::get<1>(RHS);
- });
-
- const auto &[Constant, Diff, Node] = MatchedLiterals.front();
-
- const auto Range = Node->getSourceRange();
- const auto IsMacro = Range.getBegin().isMacroID();
-
- // We do not want to emit a diagnostic when we are matching a macro, but the
- // match inside of the macro does not cover the whole macro.
- if (IsMacro && !isRangeOfCompleteMacro(Range, SM, LO)) {
- return;
- }
-
- const auto Code = getCode(Constant, IsFloat, IsLongDouble);
- diag(Range.getBegin(),
- "prefer '%0' to this %select{literal|macro}1,
diff ers by '%2'")
- << Code << IsMacro << llvm::formatv("{0:e2}", Diff).str()
- << FixItHint::CreateReplacement(Range, Code)
- << IncludeInserter.createIncludeInsertion(
- Result.SourceManager->getFileID(Range.getBegin()), "<numbers>");
-}
-
-void UseStdNumbersCheck::registerPPCallbacks(
- const SourceManager &SM, Preprocessor *const PP,
- Preprocessor *const ModuleExpanderPP) {
- IncludeInserter.registerPreprocessor(PP);
-}
-
-void UseStdNumbersCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
- Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle());
- Options.store(Opts, "DiffThreshold", DiffThresholdString);
-}
-} // namespace clang::tidy::modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.h b/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.h
deleted file mode 100644
index 05fc5ada14b87..0000000000000
--- a/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//===--- UseStdNumbersCheck.h - clang-tidy ----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
-
-#include "../ClangTidyCheck.h"
-#include "../utils/IncludeInserter.h"
-
-namespace clang::tidy::modernize {
-
-/// Finds constants and function calls to math functions that can be replaced
-/// with c++20's mathematical constants from the ``numbers`` header and
-/// offers fix-it hints.
-/// Does not match the use of variables with that value, and instead,
-/// offers a replacement at the definition of those variables.
-///
-/// For the user-facing documentation see:
-/// http://clang.llvm.org/extra/clang-tidy/checks/modernize/use-std-numbers.html
-class UseStdNumbersCheck : public ClangTidyCheck {
-public:
- UseStdNumbersCheck(StringRef Name, ClangTidyContext *Context);
-
- bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
- return LangOpts.CPlusPlus20;
- }
- void registerMatchers(ast_matchers::MatchFinder *Finder) override;
- void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
- void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,
- Preprocessor *ModuleExpanderPP) override;
- void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
- std::optional<TraversalKind> getCheckTraversalKind() const override {
- return TK_IgnoreUnlessSpelledInSource;
- }
-
-private:
- utils::IncludeInserter IncludeInserter;
- StringRef DiffThresholdString;
- double DiffThreshold;
-};
-
-} // namespace clang::tidy::modernize
-
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 9262f9bbfe62a..4ff4494cef562 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -193,13 +193,6 @@ New checks
replacing with ``starts_with`` when the method exists in the class. Notably,
this will work with ``std::string`` and ``std::string_view``.
-- New :doc:`modernize-use-std-numbers
- <clang-tidy/checks/modernize/use-std-numbers>` check.
-
- Finds constants and function calls to math functions that can be replaced
- with C++20's mathematical constants from the ``numbers`` header and
- offers fix-it hints.
-
- New :doc:`performance-enum-size
<clang-tidy/checks/performance/enum-size>` check.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index e6c02fe48fbf8..df2d5d15238d6 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -293,7 +293,6 @@ Clang-Tidy Checks
:doc:`modernize-use-nullptr <modernize/use-nullptr>`, "Yes"
:doc:`modernize-use-override <modernize/use-override>`, "Yes"
:doc:`modernize-use-starts-ends-with <modernize/use-starts-ends-with>`, "Yes"
- :doc:`modernize-use-std-numbers <modernize/use-std-numbers>`, "Yes"
:doc:`modernize-use-std-print <modernize/use-std-print>`, "Yes"
:doc:`modernize-use-trailing-return-type <modernize/use-trailing-return-type>`, "Yes"
:doc:`modernize-use-transparent-functors <modernize/use-transparent-functors>`, "Yes"
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-numbers.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-numbers.rst
deleted file mode 100644
index 207e9c00e74ba..0000000000000
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-numbers.rst
+++ /dev/null
@@ -1,74 +0,0 @@
-.. title:: clang-tidy - modernize-use-std-numbers
-
-modernize-use-std-numbers
-=========================
-
-Finds constants and function calls to math functions that can be replaced
-with C++20's mathematical constants from the ``numbers`` header and offers
-fix-it hints.
-Does not match the use of variables with that value, and instead,
-offers a replacement for the definition of those variables.
-Function calls that match the pattern of how the constant is calculated are
-matched and replaced with the ``std::numbers`` constant.
-The use of macros gets replaced with the corresponding ``std::numbers``
-constant, instead of changing the macro definition.
-
-The following list of constants from the ``numbers`` header are supported:
-
-* ``e``
-* ``log2e``
-* ``log10e``
-* ``pi``
-* ``inv_pi``
-* ``inv_sqrtpi``
-* ``ln2``
-* ``ln10``
-* ``sqrt2``
-* ``sqrt3``
-* ``inv_sqrt3``
-* ``egamma``
-* ``phi``
-
-The list currently includes all constants as of C++20.
-
-The replacements use the type of the matched constant and can remove explicit
-casts, i.e., switching between ``std::numbers::e``,
-``std::numbers::e_v<float>`` and ``std::numbers::e_v<long double>`` where
-appropriate.
-
-.. code-block:: c++
-
- double sqrt(double);
- double log2(double);
- void sink(auto&&) {}
- void floatSink(float);
-
- #define MY_PI 3.1415926
-
- void foo() {
- const double Pi = 3.141592653589; // const double Pi = std::numbers::pi
- const auto Use = Pi / 2; // no match for Pi
- static constexpr double Euler = 2.7182818; // static constexpr double Euler = std::numbers::e;
-
- log2(exp(1)); // std::numbers::log2e;
- log2(Euler); // std::numbers::log2e;
- 1 / sqrt(MY_PI); // std::numbers::inv_sqrtpi;
- sink(MY_PI); // sink(std::numbers::pi);
- floatSink(MY_PI); // floatSink(std::numbers::pi);
- floatSink(static_cast<float>(MY_PI)); // floatSink(std::numbers::pi_v<float>);
- }
-
-Options
--------
-
-.. option:: DiffThreshold
-
- A floating point value that sets the detection threshold for when literals
- match a constant. A literal matches a constant if
- ``abs(literal - constant) < DiffThreshold`` evaluates to ``true``. Default
- is `0.001`.
-
-.. option:: IncludeStyle
-
- A string specifying which include-style is used, `llvm` or `google`. Default
- is `llvm`.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-numbers.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-numbers.cpp
deleted file mode 100644
index 6c5762da5e2e8..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-numbers.cpp
+++ /dev/null
@@ -1,493 +0,0 @@
-// RUN: %check_clang_tidy -check-suffix=ALL -std=c++20 %s modernize-use-std-numbers %t
-// RUN: %check_clang_tidy -check-suffix=ALL,IMPRECISE -std=c++20 %s modernize-use-std-numbers %t -- -config="{CheckOptions: { modernize-use-std-numbers.DiffThreshold: 0.01 }}"
-
-// CHECK-FIXES-ALL: #include <numbers>
-
-namespace bar {
- double sqrt(double Arg);
- float sqrt(float Arg);
- template <typename T>
- auto sqrt(T val) { return sqrt(static_cast<double>(val)); }
-
- static constexpr double e = 2.718281828459045235360287471352662497757247093;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal,
diff ers by '0.00e+00' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double e = std::numbers::e;
-}
-
-double exp(double Arg);
-double log(double Arg);
-
-double log2(double Arg);
-float log2(float Arg);
-template <typename T>
-auto log2(T val) { return log2(static_cast<double>(val)); }
-
-double log10(double Arg);
-
-template<typename T>
-void sink(T&&) { }
-
-void floatSink(float) {}
-
-#define MY_PI 3.1415926
-
-#define INV_SQRT3 1 / bar::sqrt(3)
-#define NOT_INV_SQRT3 1 / bar::sqrt(3) + 1
-
-using my_double = double;
-using my_float = float;
-
-void foo(){
- static constexpr double Pi = 3.1415926;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:34: warning: prefer 'std::numbers::pi' to this literal,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Pi = std::numbers::pi;
-
- static constexpr double Euler = 2.7182818;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::e' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Euler = std::numbers::e;
-
- static constexpr double Phi = 1.6180339;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Phi = std::numbers::phi;
-
- static constexpr double PiCopy = Pi;
- static constexpr double PiDefineFromMacro = MY_PI;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:49: warning: prefer 'std::numbers::pi' to this macro,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double PiDefineFromMacro = std::numbers::pi;
-
- static constexpr double Pi2 = 3.14;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi' to this literal,
diff ers by '1.59e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr double Pi2 = std::numbers::pi;
- static constexpr double Euler2 = 2.71;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal,
diff ers by '8.28e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr double Euler2 = std::numbers::e;
- static constexpr double Phi2 = 1.61;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.03e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr double Phi2 = std::numbers::phi;
-
- static constexpr double Pi3 = 3.1415926L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi_v<long double>' to this literal,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Pi3 = std::numbers::pi_v<long double>;
-
- static constexpr double Euler3 = 2.7182818L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e_v<long double>' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Euler3 = std::numbers::e_v<long double>;
-
- static constexpr double Phi3 = 1.6180339L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi_v<long double>' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double Phi3 = std::numbers::phi_v<long double>;
-
- static constexpr long double Pi4 = 3.1415926L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::pi_v<long double>' to this literal,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr long double Pi4 = std::numbers::pi_v<long double>;
-
- static constexpr long double Euler4 = 2.7182818L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:43: warning: prefer 'std::numbers::e_v<long double>' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr long double Euler4 = std::numbers::e_v<long double>;
-
- static constexpr long double Phi4 = 1.6180339L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::phi_v<long double>' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr long double Phi4 = std::numbers::phi_v<long double>;
-
- static constexpr my_double Euler5 = 2.7182818;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::e' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr my_double Euler5 = std::numbers::e;
-
- static constexpr my_float Euler6 = 2.7182818;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::e' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr my_float Euler6 = std::numbers::e;
-
- static constexpr int NotEuler7 = 2.7182818;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr int NotEuler7 = std::numbers::e;
-
- static constexpr double InvPi = 1.0 / Pi;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr double InvPi = std::numbers::inv_pi;
-
- static constexpr my_float Actually2MyFloat = 2;
- bar::sqrt(Actually2MyFloat);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2_v<float>;
-
- sink(MY_PI);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::pi' to this macro,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::pi);
-
- auto X = 42.0;
- auto Y = X * 3.14;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:18: warning: prefer 'std::numbers::pi' to this literal,
diff ers by '1.59e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: auto Y = X * std::numbers::pi;
-
- constexpr static auto One = 1;
- constexpr static auto Two = 2;
-
- bar::sqrt(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- bar::sqrt(Two);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- bar::sqrt(2.0);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- auto Not2 = 2;
- Not2 = 42;
- bar::sqrt(Not2);
-
- const auto Actually2 = 2;
- bar::sqrt(Actually2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- exp(1);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::e;
-
- exp(One);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::e;
-
- exp(1.00000000000001);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::e;
-
- log2(exp(1));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- log2(Euler);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- log2(bar::e);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- log2(Euler5);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- log2(Euler6);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e_v<float>;
-
- log2(NotEuler7);
-
- auto log2e = 1.4426950;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:18: warning: prefer 'std::numbers::log2e' to this literal,
diff ers by '4.09e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: auto log2e = std::numbers::log2e;
-
- floatSink(log2(Euler));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);
-
- floatSink(static_cast<float>(log2(Euler)));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);
-
- floatSink(1.4426950);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal,
diff ers by '4.09e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);
-
- floatSink(static_cast<float>(1.4426950));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this literal,
diff ers by '4.09e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);
-
- floatSink(log2(static_cast<float>(Euler)));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);
-
- floatSink(static_cast<float>(log2(static_cast<float>(Euler))));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);
-
- floatSink(static_cast<float>(log2(static_cast<int>(Euler))));
-
- floatSink(static_cast<int>(log2(static_cast<float>(Euler))));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(static_cast<int>(std::numbers::log2e_v<float>));
-
- floatSink(1.4426950F);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v<float>' to this literal,
diff ers by '1.93e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v<float>);
-
- floatSink(static_cast<double>(1.4426950F));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal,
diff ers by '1.93e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(std::numbers::log2e);
-
- floatSink(static_cast<int>(1.4426950F));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v<float>' to this literal,
diff ers by '1.93e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: floatSink(static_cast<int>(std::numbers::log2e_v<float>));
-
- log10(exp(1));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log10e;
-
- log10(Euler);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log10e;
-
- log10(bar::e);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log10e;
-
- auto log10e = .434294;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::log10e' to this literal,
diff ers by '4.82e-07' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: auto log10e = std::numbers::log10e;
-
- auto egamma = 0.5772156 * 42;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::egamma' to this literal,
diff ers by '6.49e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: auto egamma = std::numbers::egamma * 42;
-
- sink(InvPi);
-
- sink(1 / Pi);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_pi);
-
- sink(1 / bar::sqrt(Pi));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);
-
- sink(1 / bar::sqrt(MY_PI));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);
-
- log(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::ln2;
-
- log(10);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::ln10;
-
- bar::sqrt(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- sink(1 / bar::sqrt(3));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);
-
- sink(INV_SQRT3);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this macro [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);
-
- sink(NOT_INV_SQRT3);
-
- const auto inv_sqrt3f = .577350269F;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::inv_sqrt3_v<float>' to this literal,
diff ers by '1.04e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: const auto inv_sqrt3f = std::numbers::inv_sqrt3_v<float>;
-
- bar::sqrt(3);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt3;
-
- auto somePhi = 1.6180339;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:20: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: auto somePhi = std::numbers::phi;
-
- sink(Phi);
-
- sink((42 + bar::sqrt(5)) / 2);
-
- sink((1 + bar::sqrt(5)) / 2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::phi);
-
- sink((bar::sqrt(5.0F) + 1) / 2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::phi_v<float>);
-}
-
-
-
-template <typename T>
-void baz(){
- static constexpr T Pi = 3.1415926;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::pi' to this literal,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Pi = std::numbers::pi;
-
- static constexpr T Euler = 2.7182818;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::e' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Euler = std::numbers::e;
-
- static constexpr T Phi = 1.6180339;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Phi = std::numbers::phi;
-
- static constexpr T PiCopy = Pi;
- static constexpr T PiDefineFromMacro = MY_PI;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:44: warning: prefer 'std::numbers::pi' to this macro,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T PiDefineFromMacro = std::numbers::pi;
-
- static constexpr T Pi2 = 3.14;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi' to this literal,
diff ers by '1.59e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr T Pi2 = std::numbers::pi;
- static constexpr T Euler2 = 2.71;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal,
diff ers by '8.28e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr T Euler2 = std::numbers::e;
- static constexpr T Phi2 = 1.61;
- // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.03e-03' [modernize-use-std-numbers]
- // CHECK-FIXES-IMPRECISE: static constexpr T Phi2 = std::numbers::phi;
-
- static constexpr T Pi3 = 3.1415926L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi_v<long double>' to this literal,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Pi3 = std::numbers::pi_v<long double>;
-
- static constexpr T Euler3 = 2.7182818L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e_v<long double>' to this literal,
diff ers by '2.85e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Euler3 = std::numbers::e_v<long double>;
-
- static constexpr T Phi3 = 1.6180339L;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi_v<long double>' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: static constexpr T Phi3 = std::numbers::phi_v<long double>;
-
- static constexpr my_float Actually2MyFloat = 2;
- bar::sqrt(Actually2MyFloat);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2_v<float>;
-
- constexpr static T One = 1;
- constexpr static T Two = 2;
-
- bar::sqrt(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- bar::sqrt(Two);
-
- bar::sqrt(2.0);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- T Not2 = 2;
- Not2 = 42;
- bar::sqrt(Not2);
-
- const T Actually2 = 2;
- bar::sqrt(Actually2);
-
- exp(1);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::e;
-
- exp(One);
-
- exp(1.00000000000001);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::e;
-
- log2(exp(1));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- log2(Euler);
-
- log2(bar::e);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log2e;
-
- T log2e = 1.4426950;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal,
diff ers by '4.09e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: T log2e = std::numbers::log2e;
-
- log10(exp(1));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log10e;
-
- log10(Euler);
-
- log10(bar::e);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::log10e;
-
- T log10e = .434294;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::log10e' to this literal,
diff ers by '4.82e-07' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: T log10e = std::numbers::log10e;
-
- T egamma = 0.5772156 * 42;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::egamma' to this literal,
diff ers by '6.49e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: T egamma = std::numbers::egamma * 42;
-
- sink(1 / Pi);
-
- sink(1 / bar::sqrt(Pi));
-
- sink(1 / bar::sqrt(MY_PI));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro,
diff ers by '5.36e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi);
-
-
- log(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::ln2;
-
- log(10);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::ln10;
-
- bar::sqrt(2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt2;
-
- sink(1 / bar::sqrt(3));
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3);
-
- bar::sqrt(3);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: std::numbers::sqrt3;
-
- T phi = 1.6180339;
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:13: warning: prefer 'std::numbers::phi' to this literal,
diff ers by '8.87e-08' [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: T phi = std::numbers::phi;
-
- sink((42 + bar::sqrt(5)) / 2);
-
- sink((1 + bar::sqrt(5)) / 2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::phi);
-
- sink((bar::sqrt(5.0F) + 1) / 2);
- // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v<float>' to this formula [modernize-use-std-numbers]
- // CHECK-FIXES-ALL: sink(std::numbers::phi_v<float>);
-}
-
-template <typename T>
-void foobar(){
- const T Two = 2;
- bar::sqrt(Two);
-}
-void use_templates() {
- foobar<float>();
- foobar<double>();
-
- baz<float>();
- baz<double>();
-}
-
-#define BIG_MARCO \
- struct InvSqrt3 { \
- template <typename T> static T get() { return 1 / bar::sqrt(3); } \
- }
-
-BIG_MARCO;
-
-void use_BIG_MACRO() {
-InvSqrt3 f{};
-f.get<float>();
-f.get<double>();
-}
More information about the cfe-commits
mailing list