selftests/bpf: Fix "expression result unused" warnings with icecc
authorIlya Leoshkevich <iii@linux.ibm.com>
Fri, 29 Aug 2025 02:53:57 +0000 (04:53 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 9 Sep 2025 22:07:58 +0000 (15:07 -0700)
commit5d40c038c879eeb910039adeaf6102e1c4dda807
treecaab466f0bbe843f9bc2316599f442948d868d91
parent3aa9b9a165d5e9afc7d8b5dbcd508810c05c8e89
selftests/bpf: Fix "expression result unused" warnings with icecc

icecc is a compiler wrapper that distributes compile jobs over a build
farm [1]. It works by sending toolchain binaries and preprocessed
source code to remote machines.

Unfortunately using it with BPF selftests causes build failures due to
a clang bug [2]. The problem is that clang suppresses the
-Wunused-value warning if the unused expression comes from a macro
expansion. Since icecc compiles preprocessed source code, this
information is not available. This leads to -Wunused-value false
positives.

obj_new_no_struct() and obj_new_acq() use the bpf_obj_new() macro and
discard the result. arena_spin_lock_slowpath() uses two macros that
produce values and ignores the results. Add (void) casts to explicitly
indicate that this is intentional and suppress the warning.

An alternative solution is to change the macros to not produce values.
This would work today for the arena_spin_lock_slowpath() issue, but in
the future there may appear users who need them. Another potential
solution is to replace these macros with functions. Unfortunately this
would not work, because these macros work with unknown types and
control flow.

[1] https://github.com/icecc/icecream
[2] https://github.com/llvm/llvm-project/issues/142614

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20250829030017.102615-2-iii@linux.ibm.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
tools/testing/selftests/bpf/progs/linked_list_fail.c