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.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -324,7 +324,10 @@ struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags, · 323 unmodified lines | ||
| 324 | 324 | #ifdef CONFIG_X86_IO_APIC |
| 325 | 325 | extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); |
| 326 | 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 | 331 | #endif |
| 329 | 332 | /* |
| 330 | 333 | * This function undoes the effect of one call to acpi_register_gsi(). |