On 26/10/2020 16.12, Paolo Bonzini wrote: > On 26/10/20 16:03, Daniele Buono wrote: >> Hi Paolo, >> I reorganized UASStatus to put uas_iu at the end and it works fine. >> Unfortunately, this uncovered another part of the code with a similar >> issue (variable sized type not at the end of the struct), here: >> >> In file included from ../qemu-cfi-v3/target/s390x/diag.c:21: >> ../qemu-cfi-v3/hw/s390x/ipl.h:161:23: error: field 'iplb' with variable >> sized type 'IplParameterBlock' (aka 'union IplParameterBlock') not at >> the end of a struct or class is a GNU extension >> [-Werror,-Wgnu-variable-sized-type-not-at-end] >> IplParameterBlock iplb; >> ^ >> ../qemu-cfi-v3/hw/s390x/ipl.h:162:23: error: field 'iplb_pv' with >> variable sized type 'IplParameterBlock' (aka 'union IplParameterBlock') >> not at the end of a struct or class is a GNU extension >> [-Werror,-Wgnu-variable-sized-type-not-at-end] >> IplParameterBlock iplb_pv; >> >> My understanding is that each of these IplParameterBlock may contain >> either a IPLBlockPV or a IplBlockFcp, which both end with a variable >> sized field (an array). >> >> Adding maintainers of s390x to see if they have a suggested solution to >> avoid disabling the warning. > > This one seems okay because the union constrains the size to 4K. If > "[0]" is enough to shut up the compiler, I'd say do that.
The "IplBlockFcp fcp" part seems to be completely unused, so I think you could even remove that IplBlockFcp struct. For IPLBlockPV I agree with Paolo, it's likely easiest to use [0] for that struct. Thomas