summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/APFloat.cpp
diff options
context:
space:
mode:
authorEli Friedman <efriedma@quicinc.com>2019-03-28 21:12:28 +0000
committerEli Friedman <efriedma@quicinc.com>2019-03-28 21:12:28 +0000
commit3dd72ea810dbb0c45c5815d2f43cc2b393d274a1 (patch)
treefd8ab38e89d21640f9637a18c98c3e62f988e397 /llvm/lib/Support/APFloat.cpp
parentea626d8bdb402b2ea91483be49e870e75c76e5e0 (diff)
downloadbcm5719-llvm-3dd72ea810dbb0c45c5815d2f43cc2b393d274a1.tar.gz
bcm5719-llvm-3dd72ea810dbb0c45c5815d2f43cc2b393d274a1.zip
[MC] Fix floating-point literal lexing.
This patch has three related fixes to improve float literal lexing: 1. Make AsmLexer::LexDigit handle floats without a decimal point more consistently. 2. Make AsmLexer::LexFloatLiteral print an error for floats which are apparently missing an "e". 3. Make APFloat::convertFromString use binutils-compatible exponent parsing. Together, this fixes some cases where a float would be incorrectly rejected, fixes some cases where the compiler would crash, and improves diagnostics in some cases. Patch by Brandon Jones. Differential Revision: https://reviews.llvm.org/D57321 llvm-svn: 357214
Diffstat (limited to 'llvm/lib/Support/APFloat.cpp')
-rw-r--r--llvm/lib/Support/APFloat.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp
index 3ebed5b5ab8..208950d7ab7 100644
--- a/llvm/lib/Support/APFloat.cpp
+++ b/llvm/lib/Support/APFloat.cpp
@@ -198,7 +198,10 @@ readExponent(StringRef::iterator begin, StringRef::iterator end)
const unsigned int overlargeExponent = 24000; /* FIXME. */
StringRef::iterator p = begin;
- assert(p != end && "Exponent has no digits");
+ // Treat no exponent as 0 to match binutils
+ if (p == end || ((*p == '-' || *p == '+') && (p + 1) == end)) {
+ return 0;
+ }
isNegative = (*p == '-');
if (*p == '-' || *p == '+') {
OpenPOWER on IntegriCloud