log: Add log_nop() to avoid unused-variable warnings
authorSimon Glass <sjg@chromium.org>
Wed, 25 Sep 2019 14:56:23 +0000 (08:56 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Tue, 8 Oct 2019 05:57:44 +0000 (13:57 +0800)
If a log statement includes a variable and logging is disabled, this can
generate warnings about unused variables. Add a bit more complexity to the
macros to avoid this for the common case.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
include/log.h

index 6d15e955d7e29b9c9fd99e3936032baf7ce644f4..d8f18a6afdf38b7fb7fe0782337880af61f699db 100644 (file)
@@ -76,6 +76,18 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
         int line, const char *func, const char *fmt, ...)
                __attribute__ ((format (__printf__, 6, 7)));
 
+static inline int _log_nop(enum log_category_t cat, enum log_level_t level,
+                          const char *file, int line, const char *func,
+                          const char *fmt, ...)
+               __attribute__ ((format (__printf__, 6, 7)));
+
+static inline int _log_nop(enum log_category_t cat, enum log_level_t level,
+                          const char *file, int line, const char *func,
+                          const char *fmt, ...)
+{
+       return 0;
+}
+
 /* Define this at the top of a file to add a prefix to debug messages */
 #ifndef pr_fmt
 #define pr_fmt(fmt) fmt
@@ -101,13 +113,14 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
 #define log_io(_fmt...)                log(LOG_CATEGORY, LOGL_DEBUG_IO, ##_fmt)
 #else
 #define _LOG_MAX_LEVEL LOGL_INFO
-#define log_err(_fmt...)
-#define log_warning(_fmt...)
-#define log_notice(_fmt...)
-#define log_info(_fmt...)
-#define log_debug(_fmt...)
-#define log_content(_fmt...)
-#define log_io(_fmt...)
+#define log_err(_fmt...)       log_nop(LOG_CATEGORY, LOGL_ERR, ##_fmt)
+#define log_warning(_fmt...)   log_nop(LOG_CATEGORY, LOGL_WARNING, ##_fmt)
+#define log_notice(_fmt...)    log_nop(LOG_CATEGORY, LOGL_NOTICE, ##_fmt)
+#define log_info(_fmt...)      log_nop(LOG_CATEGORY, LOGL_INFO, ##_fmt)
+#define log_debug(_fmt...)     log_nop(LOG_CATEGORY, LOGL_DEBUG, ##_fmt)
+#define log_content(_fmt...)   log_nop(LOG_CATEGORY, \
+                                       LOGL_DEBUG_CONTENT, ##_fmt)
+#define log_io(_fmt...)                log_nop(LOG_CATEGORY, LOGL_DEBUG_IO, ##_fmt)
 #endif
 
 #if CONFIG_IS_ENABLED(LOG)
@@ -129,6 +142,12 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
 #define log(_cat, _level, _fmt, _args...)
 #endif
 
+#define log_nop(_cat, _level, _fmt, _args...) ({ \
+       int _l = _level; \
+       _log_nop((enum log_category_t)(_cat), _l, __FILE__, __LINE__, \
+                     __func__, pr_fmt(_fmt), ##_args); \
+})
+
 #ifdef DEBUG
 #define _DEBUG 1
 #else