llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tidy Author: None (ealcdan) <details> <summary>Changes</summary> Some options take the maximum unsigned integer value as default, but they are being dumped to a string as integers. This makes -dump-config write invalid '-1' values for these options. This change fixes this issue by using utostr if the option is unsigned. --- Full diff: https://github.com/llvm/llvm-project/pull/85060.diff 2 Files Affected: - (modified) clang-tools-extra/clang-tidy/ClangTidyCheck.cpp (+6) - (modified) clang-tools-extra/clang-tidy/ClangTidyCheck.h (+25-2) ``````````diff diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index 3e926236adb451..710b361e16c0a7 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -139,6 +139,12 @@ void ClangTidyCheck::OptionsView::storeInt(ClangTidyOptions::OptionMap &Options, store(Options, LocalName, llvm::itostr(Value)); } +void ClangTidyCheck::OptionsView::storeUnsigned( + ClangTidyOptions::OptionMap &Options, StringRef LocalName, + uint64_t Value) const { + store(Options, LocalName, llvm::utostr(Value)); +} + template <> void ClangTidyCheck::OptionsView::store<bool>( ClangTidyOptions::OptionMap &Options, StringRef LocalName, diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h index 656a2f008f6e0e..5ccd91d5d891ff 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -408,17 +408,26 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { /// Stores an option with the check-local name \p LocalName with /// integer value \p Value to \p Options. template <typename T> - std::enable_if_t<std::is_integral_v<T>> + std::enable_if_t<std::is_integral_v<T> && std::is_signed<T>::value> store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, T Value) const { storeInt(Options, LocalName, Value); } + /// Stores an option with the check-local name \p LocalName with + /// unsigned integer value \p Value to \p Options. + template <typename T> + std::enable_if_t<std::is_unsigned<T>::value> + store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, + T Value) const { + storeUnsigned(Options, LocalName, Value); + } + /// Stores an option with the check-local name \p LocalName with /// integer value \p Value to \p Options. If the value is empty /// stores `` template <typename T> - std::enable_if_t<std::is_integral_v<T>> + std::enable_if_t<std::is_integral_v<T> && std::is_signed<T>::value> store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, std::optional<T> Value) const { if (Value) @@ -427,6 +436,18 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { store(Options, LocalName, "none"); } + /// Stores an option with the check-local name \p LocalName with + /// unsigned integer value \p Value to \p Options. + template <typename T> + std::enable_if_t<std::is_unsigned<T>::value> + store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, + std::optional<T> Value) const { + if (Value) + storeUnsigned(Options, LocalName, *Value); + else + store(Options, LocalName, "none"); + } + /// Stores an option with the check-local name \p LocalName as the string /// representation of the Enum \p Value to \p Options. /// @@ -470,6 +491,8 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { void storeInt(ClangTidyOptions::OptionMap &Options, StringRef LocalName, int64_t Value) const; + void storeUnsigned(ClangTidyOptions::OptionMap &Options, + StringRef LocalName, int64_t Value) const; std::string NamePrefix; const ClangTidyOptions::OptionMap &CheckOptions; `````````` </details> https://github.com/llvm/llvm-project/pull/85060 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits