https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102546
--- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- > What I fail to see is how "a" got removed entirely from the IL, making this > scenario possible: > > if (!(a >= d || f)) > foo(); What I meant to say is that I don't understand how "a" got removed from the IL representing this: if (!(a >= d || f)) foo(); Because it's the missing "a" which opens the door for the un-folded expression here: (f_8 << f_8) && (f_8 == 0)