diff options
Diffstat (limited to 'gcc/wide-int.cc')
-rw-r--r-- | gcc/wide-int.cc | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc index 5b08d1092b4..f22b348797b 100644 --- a/gcc/wide-int.cc +++ b/gcc/wide-int.cc @@ -748,18 +748,16 @@ unsigned int wi::shifted_mask (HOST_WIDE_INT *val, unsigned int start, unsigned int width, bool negate, unsigned int prec) { - gcc_assert (start < 4 * MAX_BITSIZE_MODE_ANY_INT); - - if (start + width > prec) - width = prec - start; - unsigned int end = start + width; - - if (width == 0) + if (start >= prec || width == 0) { val[0] = negate ? -1 : 0; return 1; } + if (width > prec - start) + width = prec - start; + unsigned int end = start + width; + unsigned int i = 0; while (i < start / HOST_BITS_PER_WIDE_INT) val[i++] = negate ? -1 : 0; |