summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Lex/LiteralSupport.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp
index a66aaa2010a..f63e6cfffc0 100644
--- a/clang/lib/Lex/LiteralSupport.cpp
+++ b/clang/lib/Lex/LiteralSupport.cpp
@@ -86,7 +86,8 @@ static unsigned ProcessCharEscape(const char *&ThisTokBuf,
for (; ThisTokBuf != ThisTokEnd; ++ThisTokBuf) {
int CharVal = HexDigitValue(ThisTokBuf[0]);
if (CharVal == -1) break;
- Overflow |= (ResultChar & 0xF0000000) ? true : false; // About to shift out a digit?
+ // About to shift out a digit?
+ Overflow |= (ResultChar & 0xF0000000) ? true : false;
ResultChar <<= 4;
ResultChar |= CharVal;
}
@@ -196,6 +197,14 @@ NumericLiteralParser::
NumericLiteralParser(const char *begin, const char *end,
SourceLocation TokLoc, Preprocessor &pp)
: PP(pp), ThisTokBegin(begin), ThisTokEnd(end) {
+
+ // This routine assumes that the range begin/end matches the regex for integer
+ // and FP constants (specifically, the 'pp-number' regex), and assumes that
+ // the byte at "*end" is both valid and not part of the regex. Because of
+ // this, it doesn't have to check for 'overscan' in various places.
+ assert(!isalnum(*end) && *end != '.' && *end != '_' &&
+ "Lexer didn't maximally munch?");
+
s = DigitsBegin = begin;
saw_exponent = false;
saw_period = false;
OpenPOWER on IntegriCloud