https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100994
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The difference after IPA between r12-433 and r12-434 is: --- pr100994.c.092t.fixup_cfg3_ 2021-06-09 14:26:08.000000000 -0400 +++ pr100994.c.092t.fixup_cfg3 2021-06-09 14:26:28.000000000 -0400 @@ -3,7 +3,6 @@ int main () { - const struct a l; const <unnamed-unsigned:9> l$c; int g.0_4; int f.3_5; @@ -14,8 +13,7 @@ int main () int e.5_10; <bb 2> [local count: 1073741824]: - l = d; - l$c_3 = l.c; + l$c_3 = 0; <bb 3> [local count: 9761289362]: g.0_4 = g; @@ -37,8 +35,8 @@ int main () goto <bb 6>; [50.00%] <bb 6> [local count: 4343773769]: - l.c = l$c_3; - _6 = BIT_FIELD_REF <l, 8, 0>; + d.c = l$c_3; + _6 = 0; _7 = _6 & 15; if (_7 != 0) goto <bb 8>; [50.00%] Note, d is a TREE_STATIC const variable where both members are 0, so I guess l$c_3 = 0; is ok, but the l.c = l$c_3 to d.c = l$c_3; change is not, that is what segfaults there.