[PATCH] D91975: clang-tidy: detect narrowing conversions involving typedefs
Eric Seidel via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 23 09:34:00 PST 2020
gridaphobe created this revision.
Herald added subscribers: cfe-commits, kbarton, nemanjai.
Herald added a project: clang.
gridaphobe requested review of this revision.
The check 'cppcoreguidelines-narrowing-conversions' does not detect conversions
involving typedef. This notably includes the standard fixed-width integer types
like int32_t, uint64_t, etc.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D91975
Files:
clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions.cpp
@@ -343,4 +343,14 @@
DERP(i, .5l);
}
+// We understand typedefs
+void typedef_context() {
+ typedef long long myint64_t;
+ int i;
+ myint64_t i64;
+
+ i = i64;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: narrowing conversion from 'myint64_t' (aka 'long long') to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions]
+}
+
} // namespace floats
Index: clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
+++ clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
@@ -48,8 +48,10 @@
Finder->addMatcher(
traverse(
ast_type_traits::TK_AsIs,
- implicitCastExpr(hasImplicitDestinationType(builtinType()),
- hasSourceExpression(hasType(builtinType())),
+ implicitCastExpr(hasImplicitDestinationType(
+ hasUnqualifiedDesugaredType(builtinType())),
+ hasSourceExpression(hasType(
+ hasUnqualifiedDesugaredType(builtinType()))),
unless(hasSourceExpression(IsCeilFloorCallExpr)),
unless(hasParent(castExpr())),
unless(isInTemplateInstantiation()))
@@ -58,16 +60,18 @@
// Binary operators:
// i += 0.5;
- Finder->addMatcher(binaryOperator(isAssignmentOperator(),
- hasLHS(expr(hasType(builtinType()))),
- hasRHS(expr(hasType(builtinType()))),
- unless(hasRHS(IsCeilFloorCallExpr)),
- unless(isInTemplateInstantiation()),
- // The `=` case generates an implicit cast
- // which is covered by the previous matcher.
- unless(hasOperatorName("=")))
- .bind("binary_op"),
- this);
+ Finder->addMatcher(
+ binaryOperator(
+ isAssignmentOperator(),
+ hasLHS(expr(hasType(hasUnqualifiedDesugaredType(builtinType())))),
+ hasRHS(expr(hasType(hasUnqualifiedDesugaredType(builtinType())))),
+ unless(hasRHS(IsCeilFloorCallExpr)),
+ unless(isInTemplateInstantiation()),
+ // The `=` case generates an implicit cast
+ // which is covered by the previous matcher.
+ unless(hasOperatorName("=")))
+ .bind("binary_op"),
+ this);
}
static const BuiltinType *getBuiltinType(const Expr &E) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91975.307101.patch
Type: text/x-patch
Size: 3078 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201123/714c0489/attachment.bin>
More information about the cfe-commits
mailing list