Author: Tibor Brunner Date: 2019-12-09T13:13:26-05:00 New Revision: be7d633a6fa6ddae6b7f455f5f336555d088c62d
URL: https://github.com/llvm/llvm-project/commit/be7d633a6fa6ddae6b7f455f5f336555d088c62d DIFF: https://github.com/llvm/llvm-project/commit/be7d633a6fa6ddae6b7f455f5f336555d088c62d.diff LOG: Magic number checker shouldn't warn on user defined string literals Fixes a false positive brought up by PR40633. Added: clang-tools-extra/test/clang-tidy/readability-magic-numbers-userliteral.cpp Modified: clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp index 6f6366cab6f6..9114deb5c736 100644 --- a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp @@ -122,10 +122,21 @@ bool MagicNumbersCheck::isConstant(const MatchFinder::MatchResult &Result, return llvm::any_of( Result.Context->getParents(ExprResult), [&Result](const DynTypedNode &Parent) { - return isUsedToInitializeAConstant(Result, Parent) || - // Ignore this instance, because this match reports the location - // where the template is defined, not where it is instantiated. - Parent.get<SubstNonTypeTemplateParmExpr>(); + if (isUsedToInitializeAConstant(Result, Parent)) + return true; + + // Ignore this instance, because this match reports the location + // where the template is defined, not where it is instantiated. + if (Parent.get<SubstNonTypeTemplateParmExpr>()) + return true; + + // Don't warn on string user defined literals: + // std::string s = "Hello World"s; + if (const auto *UDL = Parent.get<UserDefinedLiteral>()) + if (UDL->getLiteralOperatorKind() == UserDefinedLiteral::LOK_String) + return true; + + return false; }); } diff --git a/clang-tools-extra/test/clang-tidy/readability-magic-numbers-userliteral.cpp b/clang-tools-extra/test/clang-tidy/readability-magic-numbers-userliteral.cpp new file mode 100644 index 000000000000..82c4d7b0afce --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/readability-magic-numbers-userliteral.cpp @@ -0,0 +1,16 @@ +// RUN: %check_clang_tidy -std=c++14-or-later %s readability-magic-numbers %t -- + +namespace std { + class string {}; + using size_t = decltype(sizeof(int)); + string operator ""s(const char *, std::size_t); + int operator "" s(unsigned long long); +} + +void UserDefinedLiteral() { + using std::operator ""s; + "Hello World"s; + const int i = 3600s; + int j = 3600s; + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 3600s is a magic number; consider replacing it with a named constant [readability-magic-numbers] +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits