PR 81271: gcc/cp/lex.c:116: wrong condition ?

Message ID CAP8tkpCH+FNXEFuRd2xzT_iDz-G5cCwQVg+qnwy9pph7JPo6Hw@mail.gmail.com
State New
Headers
Series PR 81271: gcc/cp/lex.c:116: wrong condition ? |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gcc_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Testing passed

Commit Message

Jasmine Tang Jan. 24, 2024, 5:57 a.m. UTC
  Change the style from & to && to reflect boolean result with boolean
operation (instead of bitwise operation)

David Binderman 2017-07-01 13:24:44 UTC

trunk/gcc/cp/lex.c:116]: (style) Boolean result is used in bitwise
operation. Clarify expression with parentheses.

Source code is

  gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
               & !IDENTIFIER_KIND_BIT_1 (id)
               & !IDENTIFIER_KIND_BIT_0 (id));

Maybe better code

  gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
               && !IDENTIFIER_KIND_BIT_1 (id)
               && !IDENTIFIER_KIND_BIT_0 (id));
  

Comments

Jason Merrill Jan. 24, 2024, 8:52 p.m. UTC | #1
On 1/24/24 00:57, Jasmine Tang wrote:
> Change the style from & to && to reflect boolean result with boolean 
> operation (instead of bitwise operation)
> 
> David Binderman 2017-07-01 13:24:44 UTC
> 
> trunk/gcc/cp/lex.c:116]: (style) Boolean result is used in bitwise operation. Clarify expression with parentheses.
> 
> Source code is
> 
>    gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
>                 & !IDENTIFIER_KIND_BIT_1 (id)
>                 & !IDENTIFIER_KIND_BIT_0 (id));
> 
> Maybe better code
> 
>    gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
>                 && !IDENTIFIER_KIND_BIT_1 (id)
>                 && !IDENTIFIER_KIND_BIT_0 (id));
> 

Since the _BIT_n macros all produce either 0 or 1, bitwise & has the 
same meaning as &&, except possibly faster because it doesn't involve 
the shortcut semantics of &&.

I notice the warning suggests "Clarify expression with parentheses."  I 
suspect that means along the lines of IDENTIFIER_KEYWORD_P and such in 
cp-tree.h, where the ! expression is parenthesized:

> #define IDENTIFIER_KEYWORD_P(NODE)              \
>   ((!IDENTIFIER_KIND_BIT_2 (NODE))              \
>    & (!IDENTIFIER_KIND_BIT_1 (NODE))            \
>    & IDENTIFIER_KIND_BIT_0 (NODE))

Does doing that quiet the warning?

Jason
  

Patch

From 10b501ffa8a11c7f10fd6e6ab5d9a876a321fe13 Mon Sep 17 00:00:00 2001
From: Jasmine <tanghocle456@gmail.com>
Date: Tue, 23 Jan 2024 21:18:13 -0800
Subject: [PATCH] Fix compiler warning: Boolean result is used in bitwise
 operation

---
 gcc/cp/lex.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/lex.cc b/gcc/cp/lex.cc
index 1110db7f8d0..8d94ae1e7b1 100644
--- a/gcc/cp/lex.cc
+++ b/gcc/cp/lex.cc
@@ -136,8 +136,8 @@  void
 set_identifier_kind (tree id, cp_identifier_kind kind)
 {
   gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
-		       & !IDENTIFIER_KIND_BIT_1 (id)
-		       & !IDENTIFIER_KIND_BIT_0 (id));
+		       && !IDENTIFIER_KIND_BIT_1 (id)
+		       && !IDENTIFIER_KIND_BIT_0 (id));
   IDENTIFIER_KIND_BIT_2 (id) |= (kind >> 2) & 1;
   IDENTIFIER_KIND_BIT_1 (id) |= (kind >> 1) & 1;
   IDENTIFIER_KIND_BIT_0 (id) |= (kind >> 0) & 1;
-- 
2.34.1