ACPICA: Silent warnings about empty body in if/else statement
Subsystems (2)
PATCH 1/1 ACPICA: Silent warnings about empty body in if/else statement
When ACPI debugging is disabled, I see warnings like this one:
drivers/i2c/busses/i2c-scmi.c: In function "acpi_smbus_cmi_add_cap":drivers/i2c/busses/i2c-scmi.c:328:39: warning: suggest braces around empty body in an "else" statement [-Wempty-body] drivers/i2c/busses/i2c-scmi.c:338:12: warning: suggest braces around empty body in an "else" statement [-Wempty-body]
It is caused by ACPI_DEBUG_PRINT (or other similar macros) to resolve to nothing. Make them resolve to the classic "do {} while (0)" construct instead when the compiler likes that, to silent all such warnings.
--- include/acpi/acoutput.h | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-)
include/acpi/acoutput.h +25 -15
@@ -427,22 +427,32 @@/* * This is the non-debug case -- make everything go away, * leaving no executable debug code! +* +* Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from +* complaining about these constructs. On other compilers the do...while +* adds some extra code, so this feature is optional. */ -#define ACPI_DEBUG_PRINT (pl) -#define ACPI_DEBUG_PRINT_RAW (pl) -#define ACPI_DEBUG_EXEC (a) -#define ACPI_DEBUG_ONLY_MEMBERS (a) -#define ACPI_FUNCTION_NAME (a) -#define ACPI_FUNCTION_TRACE (a) -#define ACPI_FUNCTION_TRACE_PTR (a, b) -#define ACPI_FUNCTION_TRACE_U32 (a, b) -#define ACPI_FUNCTION_TRACE_STR (a, b) -#define ACPI_FUNCTION_ENTRY () -#define ACPI_DUMP_STACK_ENTRY (a) -#define ACPI_DUMP_OPERANDS (a, b, c) -#define ACPI_DUMP_ENTRY (a, b) -#define ACPI_DUMP_PATHNAME (a, b, c, d) -#define ACPI_DUMP_BUFFER (a, b) +#ifdef ACPI_USE_DO_WHILE_0 +#define ACPI_DO_WHILE0 do {} while (0) +#else +#define ACPI_DO_WHILE0 +#endif + +#define ACPI_DEBUG_PRINT (pl) ACPI_DO_WHILE0 +#define ACPI_DEBUG_PRINT_RAW (pl) ACPI_DO_WHILE0 +#define ACPI_DEBUG_EXEC (a) ACPI_DO_WHILE0 +#define ACPI_DEBUG_ONLY_MEMBERS (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_NAME (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_PTR (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_U32 (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_STR (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_ENTRY () ACPI_DO_WHILE0 +#define ACPI_DUMP_STACK_ENTRY (a) ACPI_DO_WHILE0 +#define ACPI_DUMP_OPERANDS (a, b, c) ACPI_DO_WHILE0 +#define ACPI_DUMP_ENTRY (a, b) ACPI_DO_WHILE0 +#define ACPI_DUMP_PATHNAME (a, b, c, d) ACPI_DO_WHILE0 +#define ACPI_DUMP_BUFFER (a, b) ACPI_DO_WHILE0#define ACPI_IS_DEBUG_ENABLED (level, component) 0/* Return macros must have a return statement at the minimum */
Signature · 2 lines
Jean Delvare Suse L3
Quoted 9 lines · Jean Delvare
When ACPI debugging is disabled, I see warnings like this one:
drivers/i2c/busses/i2c-scmi.c: In function "acpi_smbus_cmi_add_cap":drivers/i2c/busses/i2c-scmi.c:328:39: warning: suggest braces around empty body in an "else" statement [-Wempty-body]drivers/i2c/busses/i2c-scmi.c:338:12: warning: suggest braces around empty body in an "else" statement [-Wempty-body]It is caused by
ACPI_DEBUG_PRINT(or other similar macros) to resolve to nothing. Make them resolve to the classic "do {} while (0)" construct instead when the compiler likes that, to silent all such warnings.
The rule is that ACPICA patches need to go via upstream ACPICA, so I CCed the ACPICA maintainers.
Thanks!
Quoted 60 lines
Signed-off-by Jean Delvare <[email protected]>Cc Len Brown <[email protected]>Cc "Rafael J. Wysocki" <[email protected]>--- include/acpi/acoutput.h | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-)include/acpi/acoutput.h +25
-15@@ -427,22 +427,32 @@/* * This is the non-debug case -- make everything go away, * leaving no executable debug code! +* +* Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from +* complaining about these constructs. On other compilers the do...while +* adds some extra code, so this feature is optional. */ -#define ACPI_DEBUG_PRINT (pl) -#define ACPI_DEBUG_PRINT_RAW (pl) -#define ACPI_DEBUG_EXEC (a) -#define ACPI_DEBUG_ONLY_MEMBERS (a) -#define ACPI_FUNCTION_NAME (a) -#define ACPI_FUNCTION_TRACE (a) -#define ACPI_FUNCTION_TRACE_PTR (a, b) -#define ACPI_FUNCTION_TRACE_U32 (a, b) -#define ACPI_FUNCTION_TRACE_STR (a, b) -#define ACPI_FUNCTION_ENTRY () -#define ACPI_DUMP_STACK_ENTRY (a) -#define ACPI_DUMP_OPERANDS (a, b, c) -#define ACPI_DUMP_ENTRY (a, b) -#define ACPI_DUMP_PATHNAME (a, b, c, d) -#define ACPI_DUMP_BUFFER (a, b) +#ifdef ACPI_USE_DO_WHILE_0 +#define ACPI_DO_WHILE0 do {} while (0) +#else +#define ACPI_DO_WHILE0 +#endif + +#define ACPI_DEBUG_PRINT (pl) ACPI_DO_WHILE0 +#define ACPI_DEBUG_PRINT_RAW (pl) ACPI_DO_WHILE0 +#define ACPI_DEBUG_EXEC (a) ACPI_DO_WHILE0 +#define ACPI_DEBUG_ONLY_MEMBERS (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_NAME (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE (a) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_PTR (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_U32 (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_TRACE_STR (a, b) ACPI_DO_WHILE0 +#define ACPI_FUNCTION_ENTRY () ACPI_DO_WHILE0 +#define ACPI_DUMP_STACK_ENTRY (a) ACPI_DO_WHILE0 +#define ACPI_DUMP_OPERANDS (a, b, c) ACPI_DO_WHILE0 +#define ACPI_DUMP_ENTRY (a, b) ACPI_DO_WHILE0 +#define ACPI_DUMP_PATHNAME (a, b, c, d) ACPI_DO_WHILE0 +#define ACPI_DUMP_BUFFER (a, b) ACPI_DO_WHILE0#define ACPI_IS_DEBUG_ENABLED (level, component) 0/* Return macros must have a return statement at the minimum */
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.
Quoted 7 lines · Rafael J. Wysocki
Quoted 6 lines · Jean Delvare
When ACPI debugging is disabled, I see warnings like this one:
drivers/i2c/busses/i2c-scmi.c: In function "acpi_smbus_cmi_add_cap":drivers/i2c/busses/i2c-scmi.c:328:39: warning: suggest braces around empty body in an "else" statement [-Wempty-body]drivers/i2c/busses/i2c-scmi.c:338:12: warning: suggest braces around empty body in an "else" statement [-Wempty-body]
Quoted 6 lines
Quoted 3 lines
It is caused by
ACPI_DEBUG_PRINT(or other similar macros) to resolve to nothing. Make them resolve to the classic "do {} while (0)" construct instead when the compiler likes that, to silent all such warnings.The rule is that ACPICA patches need to go via upstream ACPICA, so I CCed the ACPICA maintainers.
Thanks Rafael. Maybe MAINTAINERS should be adjusted accordingly. Contributors can't guess.
Thanks,
Signature · 7 lines
Jean Delvare Suse L3 Support -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 12 lines · Jean Delvare
Quoted 11 lines · Rafael J. Wysocki
Quoted 9 lines · Jean Delvare
When ACPI debugging is disabled, I see warnings like this one:
drivers/i2c/busses/i2c-scmi.c: In function "acpi_smbus_cmi_add_cap":drivers/i2c/busses/i2c-scmi.c:328:39: warning: suggest braces around empty body in an "else" statement [-Wempty-body]drivers/i2c/busses/i2c-scmi.c:338:12: warning: suggest braces around empty body in an "else" statement [-Wempty-body]It is caused by
ACPI_DEBUG_PRINT(or other similar macros) to resolve to nothing. Make them resolve to the classic "do {} while (0)" construct instead when the compiler likes that, to silent all such warnings.
Quoted 5 lines
Quoted 2 lines
The rule is that ACPICA patches need to go via upstream ACPICA, so I CCed the ACPICA maintainers.
Thanks Rafael. Maybe
MAINTAINERSshould be adjusted accordingly. Contributors can't guess.
That actually is a good idea. I think we'll do that.
Thanks!
Signature · 6 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html