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.

Reply via email to