diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-03 10:09:17 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-03 10:09:17 +0000 |
commit | 2cd0cb0874d92deed325907e8672fa43063bf2fc (patch) | |
tree | b3e647b119808a63f19c3862126accc2928045bb /gcc/wide-int.cc | |
parent | 6d4abe26c94ee64beeaf11299fd52888ec9982ad (diff) | |
download | gcc-2cd0cb0874d92deed325907e8672fa43063bf2fc.tar.gz |
Revert r201806. Allow out-of-range start bits in shifted_mask.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/wide-int@204325 138bc75d-0d04-0410-961f-82ee72b054a4
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; |