Skip to content

Commit 60cc85f

Browse files
committed
[clang-tidy] Fix modernize-use-integer-sign-comparison comparison
- add ``ConsideringIntegerSize`` option, that ignores a comparison between a signed wide and an unsigned narrow integer types, add documentation.
1 parent 0591e8b commit 60cc85f

File tree

5 files changed

+26
-5
lines changed

5 files changed

+26
-5
lines changed

clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ class ModernizeModule : public ClangTidyModule {
126126
"modernize-use-uncaught-exceptions");
127127
CheckFactories.registerCheck<UseUsingCheck>("modernize-use-using");
128128
}
129+
130+
ClangTidyOptions getModuleOptions() override {
131+
ClangTidyOptions Options;
132+
Options.CheckOptions
133+
["modernize-use-integer-sign-comparison.ConsideringIntegerSize"] =
134+
"true";
135+
return Options;
136+
}
129137
};
130138

131139
// Register the ModernizeTidyModule using this statically initialized variable.

clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,13 @@ UseIntegerSignComparisonCheck::UseIntegerSignComparisonCheck(
8080
: ClangTidyCheck(Name, Context),
8181
IncludeInserter(Options.getLocalOrGlobal("IncludeStyle",
8282
utils::IncludeSorter::IS_LLVM),
83-
areDiagsSelfContained()) {}
83+
areDiagsSelfContained()),
84+
ConsideringIntSize(Options.get("ConsideringIntegerSize", true)) {}
8485

8586
void UseIntegerSignComparisonCheck::storeOptions(
8687
ClangTidyOptions::OptionMap &Opts) {
8788
Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle());
89+
Options.store(Opts, "ConsideringIntegerSize", ConsideringIntSize);
8890
}
8991

9092
void UseIntegerSignComparisonCheck::registerMatchers(MatchFinder *Finder) {
@@ -139,10 +141,11 @@ void UseIntegerSignComparisonCheck::check(
139141
if (LHS == nullptr || RHS == nullptr)
140142
return;
141143

142-
if (Result.Context->getTypeSize(
143-
SignedCastExpression->getSubExpr()->getType()) >
144-
Result.Context->getTypeSize(
145-
UnSignedCastExpression->getSubExpr()->getType()))
144+
if (ConsideringIntSize &&
145+
(Result.Context->getTypeSize(
146+
SignedCastExpression->getSubExpr()->getType()) >
147+
Result.Context->getTypeSize(
148+
UnSignedCastExpression->getSubExpr()->getType())))
146149
return;
147150

148151
const Expr *SubExprLHS = nullptr;

clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class UseIntegerSignComparisonCheck : public ClangTidyCheck {
3535

3636
private:
3737
utils::IncludeInserter IncludeInserter;
38+
const bool ConsideringIntSize;
3839
};
3940

4041
} // namespace clang::tidy::modernize

clang-tools-extra/docs/ReleaseNotes.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,11 @@ Changes in existing checks
301301
<clang-tidy/checks/modernize/use-designated-initializers>` check to fix a
302302
crash when a class is declared but not defined.
303303

304+
- Improved :doc:`modernize-use-integer-sign-comparison
305+
<clang-tidy/checks/modernize/use-integer-sign-comparison>` check to
306+
add an option ``ConsideringIntegerSize``, that ignores a comparison between
307+
a signed wide and an unsigned narrow integer types.
308+
304309
- Improved :doc:`modernize-use-nullptr
305310
<clang-tidy/checks/modernize/use-nullptr>` check to also recognize
306311
``NULL``/``__null`` (but not ``0``) when used with a templated type.

clang-tools-extra/docs/clang-tidy/checks/modernize/use-integer-sign-comparison.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,7 @@ Options
3434

3535
A string specifying which include-style is used, `llvm` or `google`.
3636
Default is `llvm`.
37+
38+
.. option:: ConsideringIntegerSize
39+
Ignores a comparison between a signed wide and an unsigned narrow
40+
integer types. Default is `true`.

0 commit comments

Comments
 (0)