From: Thomas Huth <thuth@redhat.com>
To: Eric Blake <eblake@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Bug 1881004 <1881004@bugs.launchpad.net>
Cc: QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Bug 1881004] [NEW] fpu/softfloat.c: error: bitwise negation of a boolean expression
Date: Thu, 28 May 2020 08:20:34 +0200 [thread overview]
Message-ID: <f660e0fc-d33a-e09e-4101-c5d112f889ef@redhat.com> (raw)
In-Reply-To: <ee41069e-5e6f-d4f5-22ed-795deb4b7ba5@redhat.com>
On 27/05/2020 23.54, Eric Blake wrote:
> On 5/27/20 4:40 PM, Peter Maydell wrote:
>> On Wed, 27 May 2020 at 20:21, Philippe Mathieu-Daudé
>> <1881004@bugs.launchpad.net> wrote:
>>>
>>> Public bug reported:
>>>
>>> Last time I built QEMU was on commit
>>> d5c75ec500d96f1d93447f990cd5a4ef5ba27fae,
>>> I just pulled to fea8f3ed739536fca027cf56af7f5576f37ef9cd and now get:
>>>
>>> CC lm32-softmmu/fpu/softfloat.o
>>> fpu/softfloat.c:3365:13: error: bitwise negation of a boolean
>>> expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>> absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> !
>>
>>
>> "(x & y)" is not a boolean expression, so we should report this to clang
>> as a bug (I assume what they actually are trying to complain about is
>> bitwise AND with a boolean expression).
>
> We have:
>
> uint64_t &= ~ ( ( ( int8_t ^ int ) == int ) & bool )
>
> which is
>
> uint64_t &= ~ ( bool & bool )
>
> which is then
>
> uint64_t &= ~ ( int )
>
> resulting in one of:
>
> uint64_t &= 0xffffffffffffffff
> uint64_t &= 0xfffffffffffffffe
>
> It is a very odd way of stating that 'if this condition is true, mask
> out the least-significant-bit'. In general, 'bool & bool' is used where
> the side-effect-skipping 'bool && bool' is inappropriate; I'm a bit
> surprised that clang is not questioning whether we meant '&&' instead of
> '&' (the two operators give the same effect in this case).
>
> You are right that clang is fishy for calling it logical negation of a
> bool, when it is really logical negation of an int, but we are also
> fishy in that we are using bitwise AND of two bools as an int in the
> first place.
>
> Regardless of whether clang changes, would it be better to write the
> code as:
>
> if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
> absZ &= ~1;
> }
I agree, that's also much better to read.
And FWIW, WinUAE fixed a similar problem in the same way recently:
https://github.com/tonioni/WinUAE/commit/51f5e7bfc39cf37daf7283
So I think this is the right way to go. Could you send your suggestion
as a proper patch?
Thanks,
Thomas
next prev parent reply other threads:[~2020-05-28 6:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-27 19:13 [Bug 1881004] [NEW] fpu/softfloat.c: error: bitwise negation of a boolean expression Philippe Mathieu-Daudé
2020-05-27 21:40 ` Peter Maydell
2020-05-27 21:40 ` Peter Maydell
2020-05-27 21:54 ` Eric Blake
2020-05-27 21:54 ` Eric Blake
2020-05-28 6:20 ` Thomas Huth [this message]
2020-05-28 9:28 ` [Bug 1881004] " Philippe Mathieu-Daudé
2020-06-08 7:17 ` Philippe Mathieu-Daudé
2020-07-20 16:27 ` Peter Maydell
2020-08-20 15:09 ` Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f660e0fc-d33a-e09e-4101-c5d112f889ef@redhat.com \
--to=thuth@redhat.com \
--cc=1881004@bugs.launchpad.net \
--cc=eblake@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).