[Bug middle-end/85164] poly-int.h:845:5: runtime error: signed integer overflow
rsandifo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Apr 17 15:50:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85164
rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |rsandifo at gcc dot gnu.org
--- Comment #6 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #5)
> The first above is on:
> case MINUS:
> /* If X is (minus C Y) where C's least set bit is larger than any bit
> in the mask, then we may replace with (neg Y). */
> if (poly_int_rtx_p (XEXP (x, 0), &const_op0)
> && (unsigned HOST_WIDE_INT) known_alignment (const_op0) > mask)
> and
> template<unsigned int N, typename Ca>
> inline POLY_BINARY_COEFF (Ca, Ca)
> known_alignment (const poly_int_pod<N, Ca> &a)
> {
> typedef POLY_BINARY_COEFF (Ca, Ca) C;
> C r = a.coeffs[0];
> for (unsigned int i = 1; i < N; ++i)
> r |= a.coeffs[i];
> return r & -r;
> }
>
> The poly_int* stuff makes this much harder to fix, it is unclear if there is
> some way to get the unsigned type for the C type and use that as r & -(Cuns)
> r;
> to avoid the UB, and there is no poly_uint_rtx_p or something to request
> poly_uint64 from the rtx. Richard?
Changing:
(unsigned HOST_WIDE_INT) known_alignment (const_op0)
to:
known_alignment (poly_uint64 (const_op0))
should work.
>
> The second one is
> return (!known_size_p (decl_size) || known_eq (decl_size, 0)
> ? maybe_ne (offset, 0)
> : maybe_gt (offset + size, decl_size));
> and again, both offset and size are poly_int64, not sure how can one
> reinterpret cast that to poly_uint64 for the operation and then cast back to
> poly_int64.
Normal casts between poly_X and poly_Y work if casts between X and Y work.
> But in that case also if we shouldn't punt on the overflow somehow.
I guess using known_subrange_p would do that.
More information about the Gcc-bugs
mailing list