On 2025-09-09 09:20, Jakub Kicinski wrote:
> Is it just a GCC warning or rather a combination of GCC and some
> misguided glibc decorator to force check the return of read/write?
> Naming the compiler versions and the warning flag which enables
> this would be useful. We don't see it building with normal warning
> level today.
Thanks for the review!
I found that the warnings occur under specific build
conditions that explain why it's not consistently seen:
The warning appears when manually cleaning and rebuilding net/lib/:
cd tools/testing/selftests/net/lib/
make clean && make
The warning messages are:
ksft.h: In function ‘ksft_ready’:
ksft.h:27:9: warning: ignoring return value of ‘write’ declared with
attribute ‘warn_unused_result’ [-Wunused-result]
ksft.h: In function ‘ksft_wait’:
ksft.h:51:9: warning: ignoring return value of ‘read’ declared with
attribute ‘warn_unused_result’ [-Wunused-result]
This is triggered by:
- GCC version: 14.2.0
- -Wall flag (which includes -Wunused-result)
During investigation of this unused result warning and following up on
the patch by Minh-Quang Bui [1], I also discovered an issue with the
selftests build system: running 'make clean' from
tools/testing/selftests/ doesn't clean objects in net/lib/ because the
clean target doesn't include $(INSTALL_DEPS_TARGET). This explains why
net/lib compiled objects persist after cleaning and why the warning only
appears with manual cleaning of that specific directory.
> Can you not cast the read() to void directly?
Sure. Direct casting is much cleaner. I haven't noticed it... Thanks for
the advice.
Would it be acceptable to:
1. Send a v2 of this patch with the direct void casting approach and
more precise commit message?
2. Send a separate patch to fix the selftests Makefile clean target to
include $(INSTALL_DEPS_TARGET)?
[1]
https://lore.kernel.org/all/20250601142914.13379-1-minhquangbu...@gmail.com/
Thanks,
Nai-Chen Cheng