On Fri, 7 Nov 2025 10:27:27 +0100 "David Hildenbrand (Red Hat)"
<[email protected]> 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) <[email protected]>
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?