https://github.com/felix642 updated https://github.com/llvm/llvm-project/pull/72068
From 65eaa9e01bcd32dccf1e0c9bd3f2bdd3e53ccb2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix-Antoine=20Constantin?= <felix-antoine.constan...@polymtl.ca> Date: Sun, 12 Nov 2023 16:07:13 -0500 Subject: [PATCH 1/3] [clang-tidy] Improved readability-bool-conversion to be more consistent when using parentheses Fixes #71852 --- .../ImplicitBoolConversionCheck.cpp | 5 ++-- clang-tools-extra/docs/ReleaseNotes.rst | 4 +++ .../readability/implicit-bool-conversion.cpp | 30 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp index 69e6d73c4fcd7bb..f0fca30de3b3c4d 100644 --- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp @@ -152,7 +152,8 @@ StringRef getEquivalentBoolLiteralForExpr(const Expr *Expression, return "false"; } - if (const auto *IntLit = dyn_cast<IntegerLiteral>(Expression)) { + if (const auto *IntLit = + dyn_cast<IntegerLiteral>(Expression->IgnoreParens())) { return (IntLit->getValue() == 0) ? "false" : "true"; } @@ -385,7 +386,7 @@ void ImplicitBoolConversionCheck::handleCastFromBool( << DestType; if (const auto *BoolLiteral = - dyn_cast<CXXBoolLiteralExpr>(Cast->getSubExpr())) { + dyn_cast<CXXBoolLiteralExpr>(Cast->getSubExpr()->IgnoreParens())) { Diag << tooling::fixit::createReplacement( *Cast, getEquivalentForBoolLiteral(BoolLiteral, DestType, Context)); } else { diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index f49c412118e7d98..ab9ef8cdfb37a00 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -412,6 +412,10 @@ Changes in existing checks do-while loops into account for the `AllowIntegerConditions` and `AllowPointerConditions` options. +- Improved :doc:`readability-implicit-bool-conversion + <clang-tidy/checks/readability/implicit-bool-conversion>` check to provide + consistent suggestions when parentheses are added to the return value. + - Improved :doc:`readability-non-const-parameter <clang-tidy/checks/readability/non-const-parameter>` check to ignore false-positives in initializer list of record. diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp index 323cf813c047000..f7f5d506a9ce0e0 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp @@ -472,6 +472,36 @@ bool f(S& s) { } // namespace ignore_1bit_bitfields +int implicitConversionReturnInt() +{ + return true; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: implicit conversion bool -> 'int' + // CHECK-FIXES: return 1 +} + +int implicitConversionReturnIntWithParens() +{ + return (true); + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: implicit conversion bool -> 'int' + // CHECK-FIXES: return 1 +} + + +bool implicitConversionReturnBool() +{ + return 1; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: implicit conversion 'int' -> bool + // CHECK-FIXES: return true +} + +bool implicitConversionReturnBoolWithParens() +{ + return (1); + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: implicit conversion 'int' -> bool + // CHECK-FIXES: return true +} + + namespace PR47000 { int to_int(bool x) { return int{x}; } From f45ae6f72eb4585620bc567632c0d5b8019db79c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix-Antoine=20Constantin?= <felix-antoine.constan...@polymtl.ca> Date: Mon, 13 Nov 2023 20:42:43 -0500 Subject: [PATCH 2/3] fixup! [clang-tidy] Improved readability-bool-conversion to be more consistent when using parentheses Updated ReleaseNotes.rst --- clang-tools-extra/docs/ReleaseNotes.rst | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index ab9ef8cdfb37a00..2d1c222b5eaa114 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -410,11 +410,8 @@ Changes in existing checks - Improved :doc:`readability-implicit-bool-conversion <clang-tidy/checks/readability/implicit-bool-conversion>` check to take do-while loops into account for the `AllowIntegerConditions` and - `AllowPointerConditions` options. - -- Improved :doc:`readability-implicit-bool-conversion - <clang-tidy/checks/readability/implicit-bool-conversion>` check to provide - consistent suggestions when parentheses are added to the return value. + `AllowPointerConditions` options. It also now provides more consistent + suggestions when parentheses are added to the return value. - Improved :doc:`readability-non-const-parameter <clang-tidy/checks/readability/non-const-parameter>` check to ignore _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits