https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119984
Bug ID: 119984 Summary: Incorrect code with -O2 and above Product: gcc Version: 15.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: saul.x.robinson at durham dot ac.uk Target Milestone: --- 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;} }