https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119984

--- Comment #4 from saul.x.robinson at durham dot ac.uk ---
(In reply to saul.x.robinson from comment #0)
> I have confirmed is bug occurs on 15.1.0 and 12.2.0. Don't know how to find
> more recent versions.
> Those GCC versions were compiling for a 64bit linux distro.
> Also tested and saw the bug on a version of GCC15.1.0 compiled with
> --target=sh3eb-elf -disable-nls --without-headers .
> I filed it under tree-optimization as I do not know what field to put this
> under.
> 
> On -O2 and above the second "and" statement seems to not be present in the
> machine code.
> //==the_Code==
> int test_func(long long temp){
>       int ci,out;
>       ci=temp;
>       ci&=0x7f800000;
>       ci+=127<<23;
>       ci&=0x7f800000;
>       out=ci;
>       return out;
> }
> int main(){
>       int out=test_func(-1);
>       if (out&(1<<31)){return 1;}
>       else{return 0;}
> }

I know the integer overflows.
Does that sort of undefined behavior cause issues with the final machine code
the compiler generates?

Reply via email to