[PATCH] configure: disable -Wxor-used-as-pow

Paolo Bonzini posted 1 patch 3 years, 9 months ago
Test FreeBSD passed
Test docker-mingw@fedora passed
Test checkpatch passed
Test docker-quick@centos7 passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200623173726.20909-1-pbonzini@redhat.com
configure | 1 +
1 file changed, 1 insertion(+)
[PATCH] configure: disable -Wxor-used-as-pow
Posted by Paolo Bonzini 3 years, 9 months ago
Clang being clang and adding more pointless warnings.  In a hardware
emulator there are going to be plenty of bitwise operations, and the
chance of someone writing ^ for pow and not being caught is basically
zero.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 configure | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configure b/configure
index 8d9435a0e0..d42f060ee7 100755
--- a/configure
+++ b/configure
@@ -2062,6 +2062,7 @@ add_to nowarn_flags -Wno-string-plus-int
 add_to nowarn_flags -Wno-typedef-redefinition
 add_to nowarn_flags -Wno-tautological-type-limit-compare
 add_to nowarn_flags -Wno-psabi
+add_to nowarn_flags -Wno-xor-used-as-pow
 
 gcc_flags="$warn_flags $nowarn_flags"
 
-- 
2.26.2


Re: [PATCH] configure: disable -Wxor-used-as-pow
Posted by Eric Blake 3 years, 9 months ago
On 6/23/20 12:37 PM, Paolo Bonzini wrote:
> Clang being clang and adding more pointless warnings.  In a hardware
> emulator there are going to be plenty of bitwise operations, and the
> chance of someone writing ^ for pow and not being caught is basically
> zero.

Did this warning actually fire?

My understanding (from a quick glance of 
https://reviews.llvm.org/D63423) is that it is supposed to catch 
instances of '2 ^ 16' where someone meant '1 << 16' instead of 18.  I 
don't know if it is supposed to flag 'a ^ 16' (if it does, then it is 
indeed useless), or only when both lhs and rhs are constants and where 
lhs is 2 or 10, so my initial reaction is that without seeing an actual 
false positive, we are premature in disabling it.

> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   configure | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/configure b/configure
> index 8d9435a0e0..d42f060ee7 100755
> --- a/configure
> +++ b/configure
> @@ -2062,6 +2062,7 @@ add_to nowarn_flags -Wno-string-plus-int
>   add_to nowarn_flags -Wno-typedef-redefinition
>   add_to nowarn_flags -Wno-tautological-type-limit-compare
>   add_to nowarn_flags -Wno-psabi
> +add_to nowarn_flags -Wno-xor-used-as-pow

Pre-existing, but is it worth ordering flag additions in alphabetical 
order (the three preceding lines are in the wrong order if so).

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


Re: [PATCH] configure: disable -Wxor-used-as-pow
Posted by Paolo Bonzini 3 years, 9 months ago
On 23/06/20 20:41, Eric Blake wrote:
> On 6/23/20 12:37 PM, Paolo Bonzini wrote:
>> Clang being clang and adding more pointless warnings.  In a hardware
>> emulator there are going to be plenty of bitwise operations, and the
>> chance of someone writing ^ for pow and not being caught is basically
>> zero.
> 
> Did this warning actually fire?
> 
> My understanding (from a quick glance of
> https://reviews.llvm.org/D63423) is that it is supposed to catch
> instances of '2 ^ 16' where someone meant '1 << 16' instead of 18.  I
> don't know if it is supposed to flag 'a ^ 16' (if it does, then it is
> indeed useless), or only when both lhs and rhs are constants and where
> lhs is 2 or 10, so my initial reaction is that without seeing an actual
> false positive, we are premature in disabling it.

There is an instance of 2 ^ 20.

But it's actually a bug.  Objection (and faith in humanity) retracted.

Paolo