https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123021
Bug ID: 123021
Summary: warning while compiling the progs/free_timer.c kernel
BPF selftest
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: jemarch at gcc dot gnu.org
Target Milestone: ---
Created attachment 63000
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=63000&action=edit
Reproducer
The kernel BPF selftest progs/free_timer.c contains a function:
static int timer_cb(void *map, void *key, struct map_value *value)
{
volatile int sum = 0;
int i;
bpf_for(i, 0, 1024 * 1024) sum += i;
return 0;
}
that expands to:
static int timer_cb(void *map, void *key, struct map_value *value)
{
volatile int sum = 0;
int i;
for ( struct bpf_iter_num ___it __attribute__((aligned(8),
cleanup(bpf_iter_num_destroy))), *___p __attribute__((unused)) = (
bpf_iter_num_new(&___it, (0), (1024 * 1024)), (void)bpf_iter_num_destroy, (void
*)0); ({ int *___t = bpf_iter_num_next(&___it); (___t && ((i) = *___t, (i) >=
(0) && (i) < (1024 * 1024))); }); ) sum += i;
return 0;
}
GCC emits the warning:
$ bpf-unknown-none-gcc -g -Wall -Werror -D__TARGET_ARCH_x86 -mlittle-endian
-I/home/jemarch/gnu/src/bpf-next/tools/testing/selftests/bpf/tools/include
-I/home/jemarch/gnu/src/bpf-next/tools/testing/selftests/bpf
-I/home/jemarch/gnu/src/bpf-next/tools/include/uapi
-I/home/jemarch/gnu/src/bpf-next/tools/testing/selftests/usr/include -std=gnu11
-fno-strict-aliasing -fms-extensions -Wno-compare-distinct-pointer-types
-idirafter /usr/lib/gcc/x86_64-linux-gnu/14/include -idirafter
/usr/local/include -idirafter /usr/include/x86_64-linux-gnu -idirafter
/usr/include -DBPF_NO_PRESERVE_ACCESS_INDEX -Wno-attributes -O2 -c
free_timer.bpf-reduced.i
free_timer.bpf-reduced.i: In function ‘timer_cb’:
free_timer.bpf-reduced.i:25:15: error: variable ‘sum’ set but not used
[-Werror=unused-but-set-variable=]
25 | volatile int sum = 0;
| ^~~
Which could be justified, in which case the bpf_for loop may be incurring in
UB. Allegedly clang doesn't emit the warning.