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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits