diff options
| author | Zachary Turner <zturner@google.com> | 2016-09-22 15:55:05 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2016-09-22 15:55:05 +0000 |
| commit | d5d57635baf6f3aa8d937e20f43dad75179f2cee (patch) | |
| tree | 49fd94438cbfb61edf2522d5f67bc1f098a18fce | |
| parent | 74c3fd17984737a0ef87fd3a83eb035fc58adf21 (diff) | |
| download | bcm5719-llvm-d5d57635baf6f3aa8d937e20f43dad75179f2cee.tar.gz bcm5719-llvm-d5d57635baf6f3aa8d937e20f43dad75179f2cee.zip | |
Speculative fix for build failures due to consumeInteger.
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
| -rw-r--r-- | llvm/lib/Support/StringRef.cpp | 3 | ||||
| -rw-r--r-- | llvm/unittests/ADT/StringRefTest.cpp | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Support/StringRef.cpp b/llvm/lib/Support/StringRef.cpp index 7503fac240a..51e0394d8bd 100644 --- a/llvm/lib/Support/StringRef.cpp +++ b/llvm/lib/Support/StringRef.cpp @@ -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; diff --git a/llvm/unittests/ADT/StringRefTest.cpp b/llvm/unittests/ADT/StringRefTest.cpp index 4249f231481..40ab4e038b8 100644 --- a/llvm/unittests/ADT/StringRefTest.cpp +++ b/llvm/unittests/ADT/StringRefTest.cpp @@ -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 |

