[PATCH] D104018: [clang-tidy] Allow disabling integer narrowing conversions for cppcoreguidelines-narrowing-conversions
This revision was automatically updated to reflect the committed changes. Closed by commit rG89c41c335dac: [clang-tidy] Allow disabling integer narrowing conversions for… (authored by gchatelet). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D104018/new/ https://reviews.llvm.org/D104018 Files: clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp Index: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp === --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp @@ -0,0 +1,23 @@ +// RUN: %check_clang_tidy -check-suffix=DEFAULT %s \ +// RUN: cppcoreguidelines-narrowing-conversions %t -- \ +// RUN: -config='{CheckOptions: [{key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerNarrowingConversion, value: true}]}' + +// RUN: %check_clang_tidy -check-suffix=DISABLED %s \ +// RUN: cppcoreguidelines-narrowing-conversions %t -- \ +// RUN: -config='{CheckOptions: [{key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerNarrowingConversion, value: false}]}' + +void foo(unsigned long long value) { + int a = value; + // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:11: warning: narrowing conversion from 'unsigned long long' to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions] + // DISABLED: No warning for integer narrowing conversions when WarnOnIntegerNarrowingConversion = false. + long long b = value; + // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:17: warning: narrowing conversion from 'unsigned long long' to signed type 'long long' is implementation-defined [cppcoreguidelines-narrowing-conversions] + // DISABLED: No warning for integer narrowing conversions when WarnOnIntegerNarrowingConversion = false. +} + +void casting_float_to_bool_is_still_operational_when_integer_narrowing_is_disabled(float f) { + if (f) { +// CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'float' to 'bool' [cppcoreguidelines-narrowing-conversions] +// CHECK-MESSAGES-DISABLED: :[[@LINE-2]]:7: warning: narrowing conversion from 'float' to 'bool' [cppcoreguidelines-narrowing-conversions] + } +} Index: clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst === --- clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst +++ clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst @@ -13,7 +13,8 @@ https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es46-avoid-lossy-narrowing-truncating-arithmetic-conversions. We enforce only part of the guideline, more specifically, we flag narrowing conversions from: - - an integer to a narrower integer (e.g. ``char`` to ``unsigned char``), + - an integer to a narrower integer (e.g. ``char`` to ``unsigned char``) + if WarnOnIntegerNarrowingConversion Option is set, - an integer to a narrower floating-point (e.g. ``uint64_t`` to ``float``), - a floating-point to an integer (e.g. ``double`` to ``int``), - a floating-point to a narrower floating-point (e.g. ``double`` to ``float``) @@ -30,6 +31,11 @@ Options --- +.. option:: WarnOnIntegerNarrowingConversion + +When `true`, the check will warn on narrowing integer conversion +(e.g. ``int`` to ``size_t``). `true` by default. + .. option:: WarnOnFloatingPointNarrowingConversion When `true`, the check will warn on narrowing floating point conversion Index: clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h === --- clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h +++ clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h @@ -93,6 +93,7 @@ void handleBinaryOperator(const ASTContext , const BinaryOperator ); + const bool WarnOnIntegerNarrowingConversion; const bool WarnOnFloatingPointNarrowingConversion; const bool WarnWithinTemplateInstantiation; const bool WarnOnEquivalentBitWidth; 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 @@ -35,6 +35,8 @@ NarrowingConversionsCheck::NarrowingConversionsCheck(StringRef
[PATCH] D104018: [clang-tidy] Allow disabling integer narrowing conversions for cppcoreguidelines-narrowing-conversions
gchatelet created this revision. gchatelet added a reviewer: courbet. Herald added subscribers: shchenz, kbarton, xazax.hun, nemanjai. gchatelet requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D104018 Files: clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp Index: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp === --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-narrowing-conversions-narrowinginteger-option.cpp @@ -0,0 +1,23 @@ +// RUN: %check_clang_tidy -check-suffix=DEFAULT %s \ +// RUN: cppcoreguidelines-narrowing-conversions %t -- \ +// RUN: -config='{CheckOptions: [{key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerNarrowingConversion, value: true}]}' + +// RUN: %check_clang_tidy -check-suffix=DISABLED %s \ +// RUN: cppcoreguidelines-narrowing-conversions %t -- \ +// RUN: -config='{CheckOptions: [{key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerNarrowingConversion, value: false}]}' + +void foo(unsigned long long value) { + int a = value; + // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:11: warning: narrowing conversion from 'unsigned long long' to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions] + // DISABLED: No warning for integer narrowing conversions when WarnOnIntegerNarrowingConversion = false. + long long b = value; + // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:17: warning: narrowing conversion from 'unsigned long long' to signed type 'long long' is implementation-defined [cppcoreguidelines-narrowing-conversions] + // DISABLED: No warning for integer narrowing conversions when WarnOnIntegerNarrowingConversion = false. +} + +void casting_float_to_bool_is_still_operational_when_integer_narrowing_is_disabled(float f) { + if (f) { +// CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'float' to 'bool' [cppcoreguidelines-narrowing-conversions] +// CHECK-MESSAGES-DISABLED: :[[@LINE-2]]:7: warning: narrowing conversion from 'float' to 'bool' [cppcoreguidelines-narrowing-conversions] + } +} Index: clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst === --- clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst +++ clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst @@ -13,7 +13,8 @@ https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es46-avoid-lossy-narrowing-truncating-arithmetic-conversions. We enforce only part of the guideline, more specifically, we flag narrowing conversions from: - - an integer to a narrower integer (e.g. ``char`` to ``unsigned char``), + - an integer to a narrower integer (e.g. ``char`` to ``unsigned char``) + if WarnOnIntegerNarrowingConversion Option is set, - an integer to a narrower floating-point (e.g. ``uint64_t`` to ``float``), - a floating-point to an integer (e.g. ``double`` to ``int``), - a floating-point to a narrower floating-point (e.g. ``double`` to ``float``) @@ -30,6 +31,11 @@ Options --- +.. option:: WarnOnIntegerNarrowingConversion + +When `true`, the check will warn on narrowing integer conversion +(e.g. ``int`` to ``size_t``). `true` by default. + .. option:: WarnOnFloatingPointNarrowingConversion When `true`, the check will warn on narrowing floating point conversion Index: clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h === --- clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h +++ clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h @@ -93,6 +93,7 @@ void handleBinaryOperator(const ASTContext , const BinaryOperator ); + const bool WarnOnIntegerNarrowingConversion; const bool WarnOnFloatingPointNarrowingConversion; const bool WarnWithinTemplateInstantiation; const bool WarnOnEquivalentBitWidth; 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 @@ -35,6 +35,8 @@ NarrowingConversionsCheck::NarrowingConversionsCheck(StringRef