]> granicus.if.org Git - clang/commitdiff
Support floating point literals of the form "1e-16f" which specify an exponent but...
authorChristopher Lamb <christopher.lamb@gmail.com>
Thu, 29 Nov 2007 06:06:27 +0000 (06:06 +0000)
committerChristopher Lamb <christopher.lamb@gmail.com>
Thu, 29 Nov 2007 06:06:27 +0000 (06:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44431 91177308-0d34-0410-b5e6-96231b3b80d8

Lex/LiteralSupport.cpp
test/Lexer/11-27-2007-FloatLiterals.c [new file with mode: 0644]

index f6d1a867a32915537d6d5d41eee004bdb6f14d10..d00d9c3b16487666bee60eb77db2d798e97aa901 100644 (file)
@@ -261,7 +261,7 @@ NumericLiteralParser(const char *begin, const char *end,
       s = SkipOctalDigits(s);
       if (s == ThisTokEnd) {
         // Done.
-      } else if (isxdigit(*s)) {
+      } else if (isxdigit(*s) && !(*s == 'e' || *s == 'E')) {
         TokLoc = PP.AdvanceToTokenCharacter(TokLoc, s-begin);
         Diag(TokLoc, diag::err_invalid_octal_digit, std::string(s, s+1));
         return;
@@ -290,7 +290,7 @@ NumericLiteralParser(const char *begin, const char *end,
     s = SkipDigits(s);
     if (s == ThisTokEnd) {
       // Done.
-    } else if (isxdigit(*s)) {
+    } else if (isxdigit(*s) && !(*s == 'e' || *s == 'E')) {
       Diag(TokLoc, diag::err_invalid_decimal_digit, std::string(s, s+1));
       return;
     } else if (*s == '.') {
diff --git a/test/Lexer/11-27-2007-FloatLiterals.c b/test/Lexer/11-27-2007-FloatLiterals.c
new file mode 100644 (file)
index 0000000..68f67cf
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: clang %s -emit-llvm 2>&1 | grep 0x3BFD83C940000000 | count 2
+// RUN: clang %s -emit-llvm 2>&1 | grep 0x46A3B8B5B5056E16 | count 2
+
+float  F  = 1e-19f;
+double D  = 2e32;
+float  F2 = 01e-19f;
+double D2 = 02e32;