From 6f7adbdcd07a6c13cb81bf3048d1e52f149a9377 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Tue, 2 Sep 2008 05:29:22 +0000 Subject: [PATCH] Fix for PR2750; don't check for an 'e' in the trash after the token. Note that this isn't really a complete fix; I think there are other potential overrun situations. I don't really know what the best systematic fix is, though. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55622 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Lex/LiteralSupport.cpp | 2 +- test/Lexer/numeric-literal-trash.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/Lexer/numeric-literal-trash.c diff --git a/lib/Lex/LiteralSupport.cpp b/lib/Lex/LiteralSupport.cpp index f9fd1aac79..8c2f2aff47 100644 --- a/lib/Lex/LiteralSupport.cpp +++ b/lib/Lex/LiteralSupport.cpp @@ -224,7 +224,7 @@ NumericLiteralParser(const char *begin, const char *end, saw_period = true; s = SkipDigits(s); } - if (*s == 'e' || *s == 'E') { // exponent + if (s != ThisTokEnd && (*s == 'e' || *s == 'E')) { // exponent const char *Exponent = s; s++; saw_exponent = true; diff --git a/test/Lexer/numeric-literal-trash.c b/test/Lexer/numeric-literal-trash.c new file mode 100644 index 0000000000..243825a536 --- /dev/null +++ b/test/Lexer/numeric-literal-trash.c @@ -0,0 +1,13 @@ +/* RUN: clang -fsyntax-only -verify %s + */ +# define XRECORD(x, c_name) e##c (x, __LINE__) + + + + + + + void x() { + +XRECORD (XRECORD (1, 1), 1); + } -- 2.40.0