[clang-tools-extra] [clang-tidy] Improved readability redundant casting with enums (PR #111424)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 7 12:35:49 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tools-extra
@llvm/pr-subscribers-clang-tidy
Author: FĂ©lix-Antoine Constantin (felix642)
<details>
<summary>Changes</summary>
Fixed false negatives with readability-redundant-casting when the underlying types are the same and the option IgnoreTypeAliases is set to true.
Fixes #<!-- -->111137
---
Full diff: https://github.com/llvm/llvm-project/pull/111424.diff
3 Files Affected:
- (modified) clang-tools-extra/clang-tidy/readability/RedundantCastingCheck.cpp (+8-1)
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+6)
- (modified) clang-tools-extra/test/clang-tidy/checkers/readability/redundant-casting.cpp (+20)
``````````diff
diff --git a/clang-tools-extra/clang-tidy/readability/RedundantCastingCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantCastingCheck.cpp
index b9ff0e81cbc522..ce0b32439c43a9 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantCastingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantCastingCheck.cpp
@@ -40,8 +40,15 @@ static bool areTypesEqual(QualType S, QualType D) {
static bool areTypesEqual(QualType TypeS, QualType TypeD,
bool IgnoreTypeAliases) {
- const QualType CTypeS = TypeS.getCanonicalType();
const QualType CTypeD = TypeD.getCanonicalType();
+
+ QualType CTypeS;
+ const auto *const EnumTypeS = TypeS->getAs<EnumType>();
+ if(EnumTypeS != nullptr && !EnumTypeS->getDecl()->isScoped())
+ CTypeS = EnumTypeS->getDecl()->getIntegerType();
+ else
+ CTypeS = TypeS.getCanonicalType();
+
if (CTypeS != CTypeD)
return false;
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 3e051c7db6adcc..32bae30821092f 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -222,6 +222,12 @@ Changes in existing checks
by adding the option `UseUpperCaseLiteralSuffix` to select the
case of the literal suffix in fixes.
+- Improved :doc:`readability-redundant-casting
+ <clang-tidy/checks/readability/redundant-casting>` check by fixing
+ false negatives related to ``enum`` when setting ``IgnoreTypeAliases``
+ to true.
+
+
- Improved :doc:`readability-redundant-smartptr-get
<clang-tidy/checks/readability/redundant-smartptr-get>` check to
remove `->`, when redundant `get()` is removed.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-casting.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-casting.cpp
index 30cac6bd5cca06..ed49f32364cba8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-casting.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-casting.cpp
@@ -221,3 +221,23 @@ void testRedundantDependentNTTPCasting() {
// CHECK-MESSAGES: :[[@LINE-4]]:25: note: source type originates from referencing this non-type template parameter
// CHECK-FIXES: {{^}} T a = V;
}
+
+enum E1 : char {};
+enum class E2 : char {};
+enum E3 {};
+
+void testEnum(E1 e1, E2 e2, E3 e3){
+ char a = static_cast<char>(e1);
+ // CHECK-MESSAGES-ALIASES: :[[@LINE-1]]:12: warning: redundant explicit casting to the same type 'char' as the sub-expression, remove this casting [readability-redundant-casting]
+ // CHECK-MESSAGES-ALIASES: :[[@LINE-3]]:18: note: source type originates from referencing this parameter
+ // CHECK-FIXES-ALIASES: {{^}} char a = e1;
+
+ unsigned int d = static_cast<unsigned int>(e3);
+ // CHECK-MESSAGES-ALIASES: :[[@LINE-1]]:20: warning: redundant explicit casting to the same type 'unsigned int' as the sub-expression, remove this casting [readability-redundant-casting]
+ // CHECK-MESSAGES-ALIASES: :[[@LINE-8]]:32: note: source type originates from referencing this parameter
+ // CHECK-FIXES-ALIASES: {{^}} unsigned int d = e3;
+
+ char b = static_cast<char>(e2);
+ char c = static_cast<char>(e3);
+ E1 e = static_cast<E1>('0');
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/111424
More information about the cfe-commits
mailing list