Mike Stump <mikest...@comcast.net> writes: > diff --git a/gcc/expmed.c b/gcc/expmed.c > index ce063eb..720d8c1 100644 > --- a/gcc/expmed.c > +++ b/gcc/expmed.c > @@ -4963,6 +4963,7 @@ make_tree (tree type, rtx x) > return t; > > case CONST_DOUBLE: > + gcc_assert (HOST_BITS_PER_WIDE_INT * 2 <= MAX_BITSIZE_MODE_ANY_INT); > if (TARGET_SUPPORTS_WIDE_INT == 0 && GET_MODE (x) == VOIDmode) > t = wide_int_to_tree (type, > wide_int::from_array (&CONST_DOUBLE_LOW (x), 2,
I think this would be better as a STATIC_ASSERT. > @@ -1440,10 +1442,10 @@ real_to_integer (const REAL_VALUE_TYPE *r, bool > *fail, int precision) > } > #endif > w = SIGSZ * HOST_BITS_PER_LONG + words * HOST_BITS_PER_WIDE_INT; > - result = wide_int::from_array > + tmp = real_int::from_array > (val, (w + HOST_BITS_PER_WIDE_INT - 1) / HOST_BITS_PER_WIDE_INT, w); > - result = wi::lrshift (result, (words * HOST_BITS_PER_WIDE_INT) - exp); > - result = wide_int::from (result, precision, UNSIGNED); > + tmp = wi::lrshift<real_int> (tmp, (words * HOST_BITS_PER_WIDE_INT) - > exp); > + result = wide_int::from (tmp, precision, UNSIGNED); Why did you need the <real_int>? It was supposed to work without. > diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c > index 00b5439..7c21afa 100644 > --- a/gcc/simplify-rtx.c > +++ b/gcc/simplify-rtx.c > @@ -5384,6 +5384,7 @@ simplify_immed_subreg (enum machine_mode outermode, rtx > op, > tmp[u] = buf; > base += HOST_BITS_PER_WIDE_INT; > } > + gcc_assert (GET_MODE_PRECISION (outer_submode) <= > MAX_BITSIZE_MODE_ANY_INT); > r = wide_int::from_array (tmp, units, > GET_MODE_PRECISION (outer_submode)); > elems[elem] = immed_wide_int_const (r, outer_submode); Long line. Looks good to me otherwise FWIW. Thanks, Richard