Re: include/trace/stages/init.h:2:23: warning: 'str__irq_vectors__trace_system_name' defined but not used

From: Steven Rostedt
Date: Tue May 10 2022 - 10:33:38 EST


On Tue, 10 May 2022 02:08:23 +0800
kernel test robot <lkp@xxxxxxxxx> wrote:

> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 9be9ed2612b5aedb52a2c240edb1630b6b743cb6
> commit: af6b9668e85ffd1502aada8036ccbf4dbd481708 tracing: Move the defines to create TRACE_EVENTS into their own files
> date: 8 weeks ago
> config: i386-randconfig-s002-20220509 (https://download.01.org/0day-ci/archive/20220510/202205100202.Ag0S76wP-lkp@xxxxxxxxx/config)
> compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
> reproduce:
> # apt-get install sparse
> # sparse version: v0.6.4-dirty
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=af6b9668e85ffd1502aada8036ccbf4dbd481708
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout af6b9668e85ffd1502aada8036ccbf4dbd481708
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash arch/x86/kernel/
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
> All warnings (new ones prefixed by >>):
>
> In file included from include/trace/trace_events.h:27,
> from include/trace/define_trace.h:102,
> from arch/x86/include/asm/trace/irq_vectors.h:383,
> from arch/x86/kernel/irq.c:27:

Hmm, when I do:

$ make arch/x86/kernel/irq.i
$ astyle arch/x86/kernel/irq.i
$ grep str__irq_irq_vectors__trace_system_name

static const char str__irq_vectors__trace_system_name[] = "irq_vectors";
static struct trace_event_class __attribute__((__used__)) __attribute__((__section__(".ref.data"))) event_class_x86_irq_vector = { .system = str__irq_vectors__trace_system_name, .fields_array = trace_event_fields_x86_irq_vector, .fields = { &(event_class_x86_irq_vector.fields), &(event_class_x86_irq_vector.fields) }, .raw_init = trace_event_raw_init, .probe = trace_event_raw_event_x86_irq_vector, .reg = trace_event_reg, .perf_probe = perf_trace_x86_irq_vector, };
static struct trace_event_class __attribute__((__used__)) __attribute__((__section__(".ref.data"))) event_class_vector_config = { .system = str__irq_vectors__trace_system_name, .fields_array = trace_event_fields_vector_config, .fields = { &(event_class_vector_config.fields), &(event_class_vector_config.fields) }, .raw_init = trace_event_raw_init, .probe = trace_event_raw_event_vector_config, .reg = trace_event_reg, .perf_probe = perf_trace_vector_config, };;
[..]

How is it not used?

-- Steve


> >> include/trace/stages/init.h:2:23: warning: 'str__irq_vectors__trace_system_name' defined but not used [-Wunused-const-variable=]
> 2 | #define __app__(x, y) str__##x##y
> | ^~~~~
> include/trace/stages/init.h:3:21: note: in expansion of macro '__app__'
> 3 | #define __app(x, y) __app__(x, y)
> | ^~~~~~~
> include/trace/stages/init.h:5:29: note: in expansion of macro '__app'
> 5 | #define TRACE_SYSTEM_STRING __app(TRACE_SYSTEM_VAR,__trace_system_name)
> | ^~~~~
> include/trace/stages/init.h:8:27: note: in expansion of macro 'TRACE_SYSTEM_STRING'
> 8 | static const char TRACE_SYSTEM_STRING[] = \
> | ^~~~~~~~~~~~~~~~~~~
> include/trace/stages/init.h:11:1: note: in expansion of macro 'TRACE_MAKE_SYSTEM_STR'
> 11 | TRACE_MAKE_SYSTEM_STR();
> | ^~~~~~~~~~~~~~~~~~~~~
>
>
> vim +/str__irq_vectors__trace_system_name +2 include/trace/stages/init.h
>
> > 2 #define __app__(x, y) str__##x##y
> 3 #define __app(x, y) __app__(x, y)
> 4
>