Speculative fix for build failures due to consumeInteger.
authorZachary Turner <zturner@google.com>
Thu, 22 Sep 2016 15:55:05 +0000 (15:55 +0000)
committerZachary Turner <zturner@google.com>
Thu, 22 Sep 2016 15:55:05 +0000 (15:55 +0000)
A recent patch added support for consumeInteger() and made
getAsInteger delegate to this function.  A few buildbots are
failing as a result with an assertion failure.  On a hunch,
I tested what happens if I call getAsInteger() on an empty
string, and sure enough it crashes the same way that the
buildbots are crashing.

I confirmed that getAsInteger() on an empty string did not
crash before my patch, so I suspect this to be the cause.

I also added a unit test for the empty string.

llvm-svn: 282170

llvm/lib/Support/StringRef.cpp
llvm/unittests/ADT/StringRefTest.cpp

index 7503fac..51e0394 100644 (file)
@@ -351,6 +351,9 @@ size_t StringRef::count(StringRef Str) const {
 }
 
 static unsigned GetAutoSenseRadix(StringRef &Str) {
+  if (Str.empty())
+    return 10;
+
   if (Str.startswith("0x") || Str.startswith("0X")) {
     Str = Str.substr(2);
     return 16;
index 4249f23..40ab4e0 100644 (file)
@@ -571,7 +571,8 @@ TEST(StringRefTest, getAsInteger) {
 
 
 static const char* BadStrings[] = {
-    "18446744073709551617"  // value just over max
+    ""                      // empty string
+  , "18446744073709551617"  // value just over max
   , "123456789012345678901" // value way too large
   , "4t23v"                 // illegal decimal characters
   , "0x123W56"              // illegal hex characters