clang gets confused by an uninitialized variable in what looks to it like a never executed code path: arch/x86/kernel/acpi/boot.c:618:13: error: variable 'polarity' is uninitialized when used here [-Werror,-Wuninitialized] polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; ^~~~~~~~ arch/x86/kernel/acpi/boot.c:606:32: note: initialize the variable 'polarity' to silence this warning int rc, irq, trigger, polarity; ^ = 0 arch/x86/kernel/acpi/boot.c:617:12: error: variable 'trigger' is uninitialized when used here [-Werror,-Wuninitialized] trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; ^~~~~~~ arch/x86/kernel/acpi/boot.c:606:22: note: initialize the variable 'trigger' to silence this warning int rc, irq, trigger, polarity; ^ = 0 This is unfortunately a design decision in clang and won't be fixed. Changing the acpi_get_override_irq() macro to an inline function reliably avoids the issue.
Unified · Split
| @@ -324,7 +324,10 @@ struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags, · 323 unmodified lines | |||
| 324 | #ifdef CONFIG_X86_IO_APIC | 324 | #ifdef CONFIG_X86_IO_APIC |
| 325 | extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); | 325 | extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); |
| 326 | #else | 326 | #else |
| 327 | #define acpi_get_override_irq(gsi, trigger, polarity) (-1) | 327 | static inline int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity) |
| 328 | { | ||
| 329 | return -1; | ||
| 330 | } | ||
| 328 | #endif | 331 | #endif |
| 329 | /* | 332 | /* |
| 330 | * This function undoes the effect of one call to acpi_register_gsi(). | 333 | * This function undoes the effect of one call to acpi_register_gsi(). |