The macro trace_printk() uses a hardcoded identifier ___STR within a statement expression, which can lead to variable name shadowing if a caller happens to use the same name in its scope.
Replace the hardcoded identifier with a compound literal, which eliminates the local variable entirely and removes any shadowing risk without requiring an extra include or helper macro. Since trace_printk() is never nested, __UNIQUE_ID() provides no practical benefit here. The compound literal approach is simpler and has no compile time overhead, unlike the v1 approach which added #include <linux/compiler.h>. Signed-off-by: Qian-Yu Lin <[email protected]> --- include/linux/trace_printk.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/linux/trace_printk.h b/include/linux/trace_printk.h index 2670ec7f4262..7a4f6711834f 100644 --- a/include/linux/trace_printk.h +++ b/include/linux/trace_printk.h @@ -86,8 +86,7 @@ do { \ #define trace_printk(fmt, ...) \ do { \ - char _______STR[] = __stringify((__VA_ARGS__)); \ - if (sizeof(_______STR) > 3) \ + if (sizeof((char[]){__stringify((__VA_ARGS__))}) > 3) \ do_trace_printk(fmt, ##__VA_ARGS__); \ else \ trace_puts(fmt); \ -- 2.43.0
