misc: Replace zero-length arrays with flexible array member (automatic)
commitf7795e4096d8bd1c767c5ddb450fa859ff20490e
authorPhilippe Mathieu-Daudé <philmd@redhat.com>
Wed, 4 Mar 2020 15:38:15 +0000 (4 16:38 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 16 Mar 2020 21:07:42 +0000 (16 22:07 +0100)
treec7767c88747e00be8118f81349bce043bc2f2959
parent770275ed0c0ab05677472efcf184b1a02ab14d07
misc: Replace zero-length arrays with flexible array member (automatic)

Description copied from Linux kernel commit from Gustavo A. R. Silva
(see [3]):

--v-- description start --v--

  The current codebase makes use of the zero-length array language
  extension to the C90 standard, but the preferred mechanism to
  declare variable-length types such as these ones is a flexible
  array member [1], introduced in C99:

  struct foo {
      int stuff;
      struct boo array[];
  };

  By making use of the mechanism above, we will get a compiler
  warning in case the flexible array does not occur last in the
  structure, which will help us prevent some kind of undefined
  behavior bugs from being unadvertenly introduced [2] to the
  Linux codebase from now on.

--^-- description end --^--

Do the similar housekeeping in the QEMU codebase (which uses
C99 since commit 7be41675f7cb).

All these instances of code were found with the help of the
following Coccinelle script:

  @@
  identifier s, m, a;
  type t, T;
  @@
   struct s {
      ...
      t m;
  -   T a[0];
  +   T a[];
  };
  @@
  identifier s, m, a;
  type t, T;
  @@
   struct s {
      ...
      t m;
  -   T a[0];
  +   T a[];
   } QEMU_PACKED;

[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76497732932f
[3] https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git/commit/?id=17642a2fbd2c1

Inspired-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
24 files changed:
block/linux-aio.c
bsd-user/qemu.h
contrib/libvhost-user/libvhost-user.h
hw/acpi/nvdimm.c
hw/dma/soc_dma.c
hw/i386/x86.c
hw/m68k/bootinfo.h
hw/misc/omap_l4.c
hw/nvram/eeprom93xx.c
hw/rdma/vmw/pvrdma_qp_ops.c
hw/usb/dev-network.c
hw/usb/dev-smartcard-reader.c
hw/virtio/virtio.c
hw/xen/xen_pt.h
include/hw/acpi/acpi-defs.h
include/hw/arm/smmu-common.h
include/hw/i386/intel_iommu.h
include/hw/virtio/virtio-iommu.h
include/sysemu/cryptodev.h
include/tcg/tcg.h
net/queue.c
pc-bios/s390-ccw/bootmap.h
pc-bios/s390-ccw/sclp.h
tests/qtest/libqos/ahci.h