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.

Reply via email to