[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 2/6] configure: avoid new clang 11+ warnings
From: |
Thomas Huth |
Subject: |
Re: [PATCH v2 2/6] configure: avoid new clang 11+ warnings |
Date: |
Sat, 24 Oct 2020 07:17:43 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 |
On 23/10/2020 22.06, Daniele Buono wrote:
> Clang 11 finds a couple of spots in the code that trigger new warnings:
>
> ../qemu-base/hw/usb/dev-uas.c:157:31: error: field 'status' with variable
> sized type 'uas_iu' not at the end of a struct or class is a GNU extension
> [-Werror,-Wgnu-variable-sized-type-not-at-end]
> uas_iu status;
> ^
> 1 error generated.
>
> The data structure is UASStatus, which must end with a QTAILQ_ENTRY, so
> I believe we cannot have uas_iu at the end. Since this is a gnu
> extension but CLANG supports it, just add
> -Wno-gnu-variable-sized-type-not-at-end
> to remove the warning.
>
> ../qemu-base/target/s390x/cpu_models.c:985:21: error: cast to smaller integer
> type 'S390Feat' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
> S390Feat feat = (S390Feat) opaque;
> ^~~~~~~~~~~~~~~~~
> ../qemu-base/target/s390x/cpu_models.c:1002:21: error: cast to smaller
> integer type 'S390Feat' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
> S390Feat feat = (S390Feat) opaque;
> ^~~~~~~~~~~~~~~~~
> ../qemu-base/target/s390x/cpu_models.c:1036:27: error: cast to smaller
> integer type 'S390FeatGroup' from 'void *'
> [-Werror,-Wvoid-pointer-to-enum-cast]
> S390FeatGroup group = (S390FeatGroup) opaque;
> ^~~~~~~~~~~~~~~~~~~~~~
> ../qemu-base/target/s390x/cpu_models.c:1057:27: error: cast to smaller
> integer type 'S390FeatGroup' from 'void *'
> [-Werror,-Wvoid-pointer-to-enum-cast]
> S390FeatGroup group = (S390FeatGroup) opaque;
> ^~~~~~~~~~~~~~~~~~~~~~
> 4 errors generated.
>
> These are void * that get casted to enums, which are (or can be)
> smaller than a 64bit pointer.
> A code reorg may be better on the long term, but for now will
> fix this adding
> -Wno-void-pointer-to-enum-cast
Compiling all code with -Wno-void-pointer-to-enum-cast sounds like the wrong
approach to me, since this might hide some real bugs in other spots instead.
Could you please try to cast the value through (uintptr_t) first, e.g. :
S390Feat feat = (S390Feat)(uintptr_t) opaque;
It's a little bit ugly, but still better than to disable the warning
globally, I think.
Thomas
> Signed-off-by: Daniele Buono <dbuono@linux.vnet.ibm.com>
> ---
> configure | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/configure b/configure
> index e6754c1e87..9dc05cfb8a 100755
> --- a/configure
> +++ b/configure
> @@ -2000,6 +2000,8 @@ add_to nowarn_flags -Wno-shift-negative-value
> 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-gnu-variable-sized-type-not-at-end
> +add_to nowarn_flags -Wno-void-pointer-to-enum-cast
> add_to nowarn_flags -Wno-psabi
>
> gcc_flags="$warn_flags $nowarn_flags"
>
- Re: [PATCH v2 2/6] configure: avoid new clang 11+ warnings,
Thomas Huth <=