https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99919
--- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #4) > (In reply to Aldy Hernandez from comment #3) > > The warning on the above IL seems legit. > > > > x_5 is initialized from b$i_11 when b & 1 == 0, but the read from x_5 > > happens when b & 2 != 0. So the set and the read are predicated on two > > different things. > > > > Maybe I'm missing some subtle bit field thing. Does setting b.j somehow > > alter b.i? > b.j is (b&2)<<1. > > If lower bit field acceses it is fixed (but also becomes more obvious what > the of b.j is: > _20 = VIEW_CONVERT_EXPR<unsigned char>(b); > _21 = BIT_INSERT_EXPR <_20, b$j_15, 1 (1 bits)>; > VIEW_CONVERT_EXPR<unsigned char>(b) = _21; > _3 = VIEW_CONVERT_EXPR<unsigned char>(b); > _4 = _3 & 2; > > So Mine for GCC 13. You're a rockstar. Thanks.