Fix PR4040: APInt's string constructor is too strict
patch by Jeff Yasskin!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70058 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp
index 1cabe0f..8ac589c 100644
--- a/lib/Support/APInt.cpp
+++ b/lib/Support/APInt.cpp
@@ -1918,9 +1918,9 @@
   if (isNeg)
     str++, slen--;
   assert((slen <= numbits || radix != 2) && "Insufficient bit width");
-  assert((slen*3 <= numbits || radix != 8) && "Insufficient bit width");
-  assert((slen*4 <= numbits || radix != 16) && "Insufficient bit width");
-  assert(((slen*64)/22 <= numbits || radix != 10) && "Insufficient bit width");
+  assert(((slen-1)*3 <= numbits || radix != 8) && "Insufficient bit width");
+  assert(((slen-1)*4 <= numbits || radix != 16) && "Insufficient bit width");
+  assert((((slen-1)*64)/22 <= numbits || radix != 10) && "Insufficient bit width");
 
   // Allocate memory
   if (!isSingleWord())
@@ -1961,10 +1961,12 @@
     }
 
     // Shift or multiply the value by the radix
-    if (shift)
-      *this <<= shift;
-    else
-      *this *= apradix;
+    if (slen > 1) {
+      if (shift)
+        *this <<= shift;
+      else
+        *this *= apradix;
+    }
 
     // Add in the digit we just interpreted
     if (apdigit.isSingleWord())