On Tue, Oct 27, 2020 at 4:24 AM Christophe Lyon via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> 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]
>

The testcase is an infinite loop on ILP32 targets.

-- 
H.J.

Reply via email to