On Tue, 7 Jan 2025 at 16:19, Frank Mehnert
<frank.mehn...@kernkonzept.com> wrote:
>
> On Dienstag, 7. Januar 2025 15:55:28 MEZ Kjetil Oftedal wrote:
> > On Tue, 7 Jan 2025 at 15:33, Frank Mehnert
> > <frank.mehn...@kernkonzept.com> wrote:
> > > [...]
> > >
> > > With offset=1 and x=0xffffffff'fffffff, y will 0, so y does not belong to
> > > the same object as x. There is no other value of x which could lead to a
> > > result y<x with offset=1!
> > >
> > > The comparison tests the wrap around and adapts end_ptr in that case.
> > >
> > > Again: If there was a wrap around, then the pointer arithmetic operation
> > > was wrong (undefined behavior). Hence, we can remove the test plus the 
> > > code
> > > which is executed if the test succeeds.
> >
> > [...]
> >
> > I see the point. I just don't agree with the conclusion.
> > As I see it the LLVM group is claiming that if there is any possiblity for 
> > UB,
> > even if it is dependent on input arguments, then it is always UB, and
> > the compiler can
> > remove code as it sees fit. (Which will be a nightmare for security code)
>
> I admit I thought so some time ago but in my opinion you do a wrong
> conclusion:
>
> There is a test in the code.
>
> The result of the test can _only_ be true if the code before the test
> triggered undefined behavior.
>
> In other words, if the test succeeded, then we can be sure that the test
> compared two pointers belonging to different objects -- which is undefined
> behavior.
>
> Therefore, the compiler is fine removing the test because the compiler does
> not support the case where the test result is true.
>
> If the test result is false, everything is fine, both objects may or may not
> point to different objects, but the compiler assumes that they do. But: If
> the test result is false, end_ptr does not need an adaption, therefore that
> line can be optimized out.
>
> TBH, I'm still convinced that the compiler is right. :-)
>
> Frank
> --
> Dr.-Ing. Frank Mehnert, frank.mehn...@kernkonzept.com, +49-351-41 883 224
>
> Kernkonzept GmbH.  Sitz: Dresden.  Amtsgericht Dresden, HRB 31129.
> Geschäftsführer: Dr.-Ing. Michael Hohmuth
>

Let us flip the variables around and review:
E.g.
if ( str < end_ptr )
instead of
if ( end_ptr < str )

Should the compiler then always evaluate the clause to true?
end_ptr might still be lower than str due to overflow in the artihmetic.

Best regards,
Kjetil Oftedal
_______________________________________________
devel mailing list -- devel@uclibc-ng.org
To unsubscribe send an email to devel-le...@uclibc-ng.org

Reply via email to