Skip to contentSkip to conversation

ACPICA: Silent warnings about empty body in if/else statement

PATCH In review Jean Delvare 2 participants 4 messages Oct 7, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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.

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
Jean Delvare
Suse L3
#1 lore raw
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
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.
#2 lore raw
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
#3 lore raw
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 MAINTAINERS should 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