(added Nathan for clang advice)

On Fri, Nov 07, 2025 at 04:08:55PM -0800, Andrew Morton wrote:
> 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?

-- 
Sincerely yours,
Mike.

Reply via email to