https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119428
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So this version still works: ``` void f(unsigned char *ADDR, unsigned int nr) { unsigned char mask = ~1; mask = __builtin_stdc_rotate_left (mask, nr); ADDR += nr >> 3; *ADDR &= (unsigned char) mask; } ``` Because the mask for the rotate is still there at combine.