From: Yonghong Song <yonghong.song@linux.dev>
To: Ilya Leoshkevich <iii@linux.ibm.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>
Cc: bpf@vger.kernel.org, Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>
Subject: Re: [PATCH bpf-next v3 2/2] selftests/bpf: Fix "expression result unused" warnings with icecc
Date: Wed, 27 Aug 2025 14:46:37 -0700 [thread overview]
Message-ID: <4da12baa-7211-4d9e-bbf1-f2eee9097efc@linux.dev> (raw)
In-Reply-To: <20250827194929.416969-3-iii@linux.ibm.com>
On 8/27/25 12:46 PM, Ilya Leoshkevich wrote:
> 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.
>
> arena_spin_lock_slowpath() uses two macros that produce values and
> ignores the results. Add (void) cast 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, 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
As you described in [1] and [2]. The failure is due to the compilation from .i file to .o file.
$ cat run2.sh
echo '.c -> .i -> .o'
clang -g -Wall -Werror -D__TARGET_ARCH_x86 -mlittle-endian -I/home/yhs/work/bpf-next/tools/testing/selftests/bpf/tools/include -I/home/yhs/work/bpf-next/tools/testing/selftests/bpf -I/home/yhs/work/bpf-next/tools/include/uapi -I/home/yhs/work/bpf-next/tools/testing/selftests/usr/include -std=gnu11 -fno-strict-aliasing -Wno-compare-distinct-pointer-types -idirafter /home/yhs/work/llvm-project/llvm/build.21/Release/lib/clang/21/include -idirafter /usr/local/include -idirafter /usr/include -DENABLE_ATOMICS_TESTS -O2 --target=bpfel -E progs/arena_spin_lock.c -mcpu=v4 -o /home/yhs/work/bpf-next/tools/testing/selftests/bpf/arena_spin_lock.i
clang -g -Wall -Werror -mlittle-endian -std=gnu11 -fno-strict-aliasing -Wno-compare-distinct-pointer-types -O2 --target=bpfel -c arena_spin_lock.i -mcpu=v4 -o /home/yhs/work/bpf-next/tools/testing/selftests/bpf/cpuv4/arena_spin_lock.bpf.o
echo '.c -> .o'
clang -g -Wall -Werror -D__TARGET_ARCH_x86 -mlittle-endian -I/home/yhs/work/bpf-next/tools/testing/selftests/bpf/tools/include -I/home/yhs/work/bpf-next/tools/testing/selftests/bpf -I/home/yhs/work/bpf-next/tools/include/uapi -I/home/yhs/work/bpf-next/tools/testing/selftests/usr/include -std=gnu11 -fno-strict-aliasing -Wno-compare-distinct-pointer-types -idirafter /home/yhs/work/llvm-project/llvm/build.21/Release/lib/clang/21/include -idirafter /usr/local/include -idirafter /usr/include -DENABLE_ATOMICS_TESTS -O2 --target=bpfel -c progs/arena_spin_lock.c -mcpu=v4 -o /home/yhs/work/bpf-next/tools/testing/selftests/bpf/cpuv4/arena_spin_lock.bpf.o
$ ./run2.sh
.c -> .i -> .o
In file included from progs/arena_spin_lock.c:7:
progs/bpf_arena_spin_lock.h:305:1765: error: expression result unused [-Werror,-Wunused-value]
305 | ...unsigned long __val; __sync_fetch_and_add(&__val, 0); }); else asm volatile("" ::: "memory"); }); }); (typeof(*(&lock->locked)))__val; });
| ^ ~~~~~
progs/bpf_arena_spin_lock.h:383:1769: error: expression result unused [-Werror,-Wunused-value]
383 | ...unsigned long __val; __sync_fetch_and_add(&__val, 0); }); else asm volatile("" ::: "memory"); }); }); (typeof(*(&node->locked)))__val; });
| ^ ~~~~~
2 errors generated.
.c -> .o
$
I am not sure whether we should do anything with pahole or libbpf. Essentially this is a clang
bug. We should push clang community to fix the problem.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h b/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
> index d67466c1ff77..f90531cf3ee5 100644
> --- a/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
> +++ b/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
> @@ -302,7 +302,7 @@ int arena_spin_lock_slowpath(arena_spinlock_t __arena __arg_arena *lock, u32 val
> * barriers.
> */
> if (val & _Q_LOCKED_MASK)
> - smp_cond_load_acquire_label(&lock->locked, !VAL, release_err);
> + (void)smp_cond_load_acquire_label(&lock->locked, !VAL, release_err);
>
> /*
> * take ownership and clear the pending bit.
> @@ -380,7 +380,7 @@ int arena_spin_lock_slowpath(arena_spinlock_t __arena __arg_arena *lock, u32 val
> /* Link @node into the waitqueue. */
> WRITE_ONCE(prev->next, node);
>
> - arch_mcs_spin_lock_contended_label(&node->locked, release_node_err);
> + (void)arch_mcs_spin_lock_contended_label(&node->locked, release_node_err);
>
> /*
> * While waiting for the MCS lock, the next pointer may have
prev parent reply other threads:[~2025-08-27 21:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-27 19:46 [PATCH bpf-next v3 0/2] selftests/bpf: Fix "expression result unused" warnings with icecc Ilya Leoshkevich
2025-08-27 19:46 ` [PATCH bpf-next v3 1/2] selftests/bpf: Annotate bpf_obj_new_impl() with __must_check Ilya Leoshkevich
2025-08-27 21:37 ` Yonghong Song
2025-08-28 0:50 ` Alexei Starovoitov
2025-08-27 19:46 ` [PATCH bpf-next v3 2/2] selftests/bpf: Fix "expression result unused" warnings with icecc Ilya Leoshkevich
2025-08-27 21:46 ` Yonghong Song [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4da12baa-7211-4d9e-bbf1-f2eee9097efc@linux.dev \
--to=yonghong.song@linux.dev \
--cc=agordeev@linux.ibm.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=iii@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.