[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#749008: Conflicting types due to missing #include "config.h"



Package: libpciaccess
Version: 0.13.2-1
Severity: wishlist
Usertags: goto-cc

During an analysis of all Debian packages using our research compiler tool-chain
(using tools from the cbmc package) the following error was found:

[...]
  CCLD     libpciaccess.la

warning: conflicting pointer types for variable "pci_sys"
old definition in module common_iterator file ../../src/common_init.c line 38
struct pci_system {
  const struct pci_system_methods * methods;
  unsigned long int num_devices;
  struct pci_device_private * devices;
  signed int vgaarb_fd;
  signed int vga_count;
  struct pci_device * vga_target;
  struct pci_device * vga_default_dev;
} *
new definition in module linux_sysfs file ../../src/pciaccess_private.h line 183
struct pci_system {
  const struct pci_system_methods * methods;
  unsigned long int num_devices;
  struct pci_device_private * devices;
  signed int mtrr_fd;
  signed int vgaarb_fd;
  signed int vga_count;
  unsigned int $pad0;
  struct pci_device * vga_target;
  struct pci_device * vga_default_dev;
} *

Observe the missing mtrr_fd field in common_iterator's view on the struct type.
Reviewing the code it seems this will anyhow work ok at present as
common_iterator.c does not access any field beyond "devices" - but if it does so
in future, this will have undefined behaviour.

The reason for the type conflict is the missing #include "config.h" in
common_iterator.c, which would set HAVE_MTRR.

Best,
Michael

Attachment: pgpGXv2mJry24.pgp
Description: PGP signature


Reply to: