Peter Maydell <peter.mayd...@linaro.org> writes: [...] > Also some new clang ubsan warnings on x86 Linux: > GTESTER check-qtest-i386 > [deleted existing warnings about slirp code] > /home/petmay01/linaro/qemu-for-merges/hw/pci/pci.c:166:23: runtime > error: shift exponent -1 is negative > /home/petmay01/linaro/qemu-for-merges/hw/pci/pci.c:171:24: runtime > error: shift exponent -1 is negative > /home/petmay01/linaro/qemu-for-merges/hw/pci/pci.c:172:24: runtime > error: shift exponent -1 is negative
Root cause tracked down with the appended patch. PCI maintainers, you might want to steal it. diff --git a/hw/pci/pci.c b/hw/pci/pci.c index e67664d..1937c42 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -163,11 +163,13 @@ int pci_bar(PCIDevice *d, int reg) static inline int pci_irq_state(PCIDevice *d, int irq_num) { + assert(irq_num >= 0); return (d->irq_state >> irq_num) & 0x1; } static inline void pci_set_irq_state(PCIDevice *d, int irq_num, int level) { + assert(irq_num >= 0); d->irq_state &= ~(0x1 << irq_num); d->irq_state |= level << irq_num; }