[clang-tools-extra] [clang-tidy] Fix handling of parentheses in bugprone-non-zero-enum-to-bool-conversion (PR #81890)

Piotr Zegar via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 15 10:03:51 PST 2024


https://github.com/PiotrZSL created https://github.com/llvm/llvm-project/pull/81890

Properly ignore parentheses in bitwise operators.

Closes #81515

>From 3b8defafd16cd83e86c9922d7527217a470734a3 Mon Sep 17 00:00:00 2001
From: Piotr Zegar <piotr.zegar at nokia.com>
Date: Thu, 15 Feb 2024 17:53:49 +0000
Subject: [PATCH] [clang-tidy] Fix handling of parentheses in
 bugprone-non-zero-enum-to-bool-conversion

Properly ignore parentheses in bitwise operators.

Closes: #81515
---
 .../clang-tidy/bugprone/NonZeroEnumToBoolConversionCheck.cpp | 2 +-
 clang-tools-extra/docs/ReleaseNotes.rst                      | 5 +++++
 .../checkers/bugprone/non-zero-enum-to-bool-conversion.cpp   | 2 ++
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/clang-tools-extra/clang-tidy/bugprone/NonZeroEnumToBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NonZeroEnumToBoolConversionCheck.cpp
index 918b6e3824f0b1..e0323848870bd7 100644
--- a/clang-tools-extra/clang-tidy/bugprone/NonZeroEnumToBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/NonZeroEnumToBoolConversionCheck.cpp
@@ -64,7 +64,7 @@ void NonZeroEnumToBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
                                          EnumIgnoreList)))
                                 .bind("enum"))))),
                         unless(declRefExpr(to(enumConstantDecl()))),
-                        unless(ignoringImplicit(ExcludedOperators)))),
+                        unless(ignoringParenImpCasts(ExcludedOperators)))),
                unless(hasAncestor(staticAssertDecl())))
           .bind("cast"),
       this);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index a1b95d2a2020fe..2b714186c57d45 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -112,6 +112,11 @@ New check aliases
 Changes in existing checks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
+- Improved :doc:`bugprone-non-zero-enum-to-bool-conversion
+  <clang-tidy/checks/bugprone/non-zero-enum-to-bool-conversion>` check by
+  eliminating false positives resulting from direct usage of bitwise operators
+  within parentheses.
+
 - Improved :doc:`bugprone-suspicious-include
   <clang-tidy/checks/bugprone/suspicious-include>` check by replacing the local
   options `HeaderFileExtensions` and `ImplementationFileExtensions` by the
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/non-zero-enum-to-bool-conversion.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/non-zero-enum-to-bool-conversion.cpp
index 794e7b20c8ca53..3375f69b591119 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/non-zero-enum-to-bool-conversion.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/non-zero-enum-to-bool-conversion.cpp
@@ -122,6 +122,8 @@ CustomOperatorEnum operator&(CustomOperatorEnum a, CustomOperatorEnum b) { retur
 
 void testCustomOperator(CustomOperatorEnum e) {
     if (e & E1) {}
+    if ((e & E1)) {}
+    if (!(e & E1)) {}
 }
 
 }



More information about the cfe-commits mailing list