https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115961
--- Comment #1 from Sergei Trofimovich <slyfox at gcc dot gnu.org> --- Forgot to post minimized example: // $ cat a.cc struct e { unsigned pre : 12; unsigned a : 4; }; static unsigned min_u(unsigned a, unsigned b) { return (b < a) ? b : a; } __attribute__((noipa)) void bug(e * v, unsigned def, unsigned use) { e & defE = *v; defE.a = min_u(use + 1, 0xf); } __attribute__((noipa, optimize(0))) int main(void) { e v = { 0xded, 3 }; bug(&v, 32, 33); if (v.a != 0xf) __builtin_trap(); }