Hi, On Mon, 26 Oct 2020 at 22:51, Andrew MacLeod via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > In the core of gori_compute::logical_combine we are suppose to combine > the calculated true and false ranges on each side of the operation. > > when encountering > > [0,0] = c_3 | c_4 > > we know we only need to consider the FALSE values of the range carried > by c_3 and c_4, but it can be EITHER of those ranges, so we need to > union them together to get the correct result. > > The code was performing an intersection instead, and in this particualr > case, we knew the range carried thru c_3 was alwasy [0,0] and it was > always varying through c_4.... instead of returning varying, we were > returning [0,0] which then caused some folding which was incorrect. > > Fixed by correctly calling union... > > Bootstrapped on x86_64-pc-linux-gnu, no regressions, and pushed. >
I think you need to update the testcase and declare long long g = 4073709551615 instead of just long, as it causes a warning on 32-bit targets: /gcc/testsuite/gcc.dg/pr97567.c:7:12: warning: overflow in conversion from 'long long int' to 'long int' changes value from '4073709551615' to '2080555007' [-Woverflow] Christophe > Andrew >