Hi! These testcases started failing with r12-630 and one of them got fixed with r12-4531 (aka PR102764 fix and r12-4616 further improved the fix) and the other went latent in r12-2591 (i.e. threader changes) and I believe was fixed for real by the PR102764 fix too.
Regtested on x86_64-linux and i686-linux, committed to trunk as obvious. 2022-03-02 Jakub Jelinek <ja...@redhat.com> PR debug/100541 * g++.dg/opt/pr100541-1.C: New test. * g++.dg/opt/pr100541-2.C: New test. --- gcc/testsuite/g++.dg/opt/pr100541-1.C.jj 2022-03-01 16:52:21.115876189 +0100 +++ gcc/testsuite/g++.dg/opt/pr100541-1.C 2022-03-01 16:51:35.760341725 +0100 @@ -0,0 +1,24 @@ +// PR debug/100541 +// { dg-do compile } +// { dg-options "-O3 -fno-expensive-optimizations -fno-tree-dce -fno-tree-dominator-opts -fcompare-debug" } + +int a, b, i, x, y; + +int +foo () +{ + int rcmd = 0; + switch (x) { + case 0: + if (i) + rcmd = 6; + if (y % 3) + int &m1 = rcmd = rcmd | 5; + break; + case 1: + rcmd = b; + } + if (rcmd != 7) + return rcmd; + return a; +} --- gcc/testsuite/g++.dg/opt/pr100541-2.C.jj 2022-03-01 16:52:25.162819696 +0100 +++ gcc/testsuite/g++.dg/opt/pr100541-2.C 2022-03-01 16:53:05.497256709 +0100 @@ -0,0 +1,25 @@ +// PR debug/100541 +// { dg-do compile { target c++11 } } +// { dg-options "-O2 -fno-tree-dce -fno-tree-dominator-opts -fcompare-debug" } + +int INVALID_TILE; +void GetSlopePixelZ(); +long RUNWAY_IN_block; +struct Airport { + long flags; +}; +struct Station { + Airport airport; +} * HandleCrashedAircraft_st; +short HandleCrashedAircraft_v_0; +void HandleCrashedAircraft() { + Station *__trans_tmp_1 = INVALID_TILE ? nullptr : HandleCrashedAircraft_st, + *st; + if (HandleCrashedAircraft_v_0 && __trans_tmp_1 == nullptr && + HandleCrashedAircraft_v_0 % 3) + GetSlopePixelZ(); + if (HandleCrashedAircraft_v_0) + GetSlopePixelZ(); + if (__trans_tmp_1) + st->airport.flags &= RUNWAY_IN_block; +} Jakub