On Tue, Aug 23, 2022 at 04:15:54PM +0200, Peter Krempa wrote:
The most recent environment e.g. present in our Fedora Rawhide
builds
fail to build the tree with clang with the following error:
../src/util/virhostcpu.c:1291:25: error: field 'header' with variable sized type
'struct kvm_msrs' not at the end of a struct or class is a GNU extension
[-Werror,-Wgnu-variable-sized-type-not-at-end]
struct kvm_msrs header;
^
The problem seems to be that clang doesn't like the new way the
'entries' field in struct kvm_msrs is declared.
To work around the issue we can simply allocate the variable dynamically
and use the 'entries' member as it was intended to to access the
members.
We explicitly only support GCC and CLang, and intentionally rely on
many GNU extensions to C. CLang is trying to be helpful to people
who need fully portable C code, but we don't care about that. So
why not just turn off the warning by adding
-Wno-gnu-variable-sized-style-not-at-end
better than making our code less understandable IMHO
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/util/virhostcpu.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index 54d0166b85..c1e8dc8078 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -1287,25 +1287,22 @@ virHostCPUGetMSRFromKVM(unsigned long index,
uint64_t *result)
{
VIR_AUTOCLOSE fd = -1;
- struct {
- struct kvm_msrs header;
- struct kvm_msr_entry entry;
- } msr = {
- .header = { .nmsrs = 1 },
- .entry = { .index = index },
- };
+ g_autofree struct kvm_msrs *msr = g_malloc0(sizeof(struct kvm_msrs) +
+ sizeof(struct kvm_msr_entry));
+ msr->nmsrs = 1;
+ msr->entries[0].index = index;
if ((fd = open(KVM_DEVICE, O_RDONLY)) < 0) {
virReportSystemError(errno, _("Unable to open %s"), KVM_DEVICE);
return -1;
}
- if (ioctl(fd, KVM_GET_MSRS, &msr) < 0) {
+ if (ioctl(fd, KVM_GET_MSRS, msr) < 0) {
VIR_DEBUG("Cannot get MSR 0x%lx from KVM", index);
return 1;
}
- *result = msr.entry.data;
+ *result = msr->entries[0].data;
return 0;
}
--
2.37.1
With regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|