summaryrefslogtreecommitdiff
path: root/gcc/wide-int.cc
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-03 10:09:17 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-03 10:09:17 +0000
commit2cd0cb0874d92deed325907e8672fa43063bf2fc (patch)
treeb3e647b119808a63f19c3862126accc2928045bb /gcc/wide-int.cc
parent6d4abe26c94ee64beeaf11299fd52888ec9982ad (diff)
downloadgcc-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.cc12
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;