On Fri, 7 Nov 2025 10:27:27 +0100 "David Hildenbrand (Red Hat)" david@kernel.org wrote:
On 06.11.25 13:02, Ankit Khushwaha wrote:
On Thu, Nov 06, 2025 at 12:18:57PM +0100, David Hildenbrand (Red Hat) wrote:
On 06.11.25 11:49, Ankit Khushwaha wrote:
Pointer arthemitic with 'void * addr' and 'unsigned long long dest_alignment' triggers following warning:
mremap_test.c:1035:31: warning: pointer comparison always evaluates to false [-Wtautological-compare] 1035 | if (addr + c.dest_alignment < addr) { | ^
typecasting 'addr' to 'unsigned long long' to fix pointer comparison.
With which compiler are you seeing this?
Hi David,
clang version 20.1.8 (Fedora 20.1.8-4.fc42) raised this warning.
To reproduce: make -C tools/testing/selftests/mm CC=clang
Thanks, and thanks to Lorenzo for the details.
Acked-by: David Hildenbrand (Red Hat) david@kernel.org
I must say, applying this would be an unhappy life event.
if (void* + ulong < void*)
makes perfect sense in a world which permits void* arithmetic (ie, ours). So what the heck is clang doing??
If we do
void *addr2 = addr + c.dest_alignment; if (addr2 < addr) ...
then which statement warns, and why?