summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex/LiteralSupport.cpp
diff options
context:
space:
mode:
authorSjoerd Meijer <sjoerd.meijer@arm.com>2017-09-08 09:42:32 +0000
committerSjoerd Meijer <sjoerd.meijer@arm.com>2017-09-08 09:42:32 +0000
commitab36f33db8ed1cd16277016f834527254c7a3d0f (patch)
tree4c0858785f71098aab2477eedbec55e76d4f0b8a /clang/lib/Lex/LiteralSupport.cpp
parent51ee12a9fbef806fd770151de343c563402de42b (diff)
downloadbcm5719-llvm-ab36f33db8ed1cd16277016f834527254c7a3d0f.tar.gz
bcm5719-llvm-ab36f33db8ed1cd16277016f834527254c7a3d0f.zip
Add _Float16 as a C/C++ source language type
This adds _Float16 as a source language type, which is a 16-bit floating point type defined in C11 extension ISO/IEC TS 18661-3. In follow up patches documentation and more tests will be added. Differential Revision: https://reviews.llvm.org/D33719 llvm-svn: 312781
Diffstat (limited to 'clang/lib/Lex/LiteralSupport.cpp')
-rw-r--r--clang/lib/Lex/LiteralSupport.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp
index f1738483f0a..5f6e5efa232 100644
--- a/clang/lib/Lex/LiteralSupport.cpp
+++ b/clang/lib/Lex/LiteralSupport.cpp
@@ -544,6 +544,7 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling,
isHalf = false;
isFloat = false;
isImaginary = false;
+ isFloat16 = false;
isFloat128 = false;
MicrosoftInteger = 0;
hadError = false;
@@ -588,6 +589,13 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling,
if (!isFPConstant) break; // Error for integer constant.
if (isHalf || isFloat || isLong || isFloat128)
break; // HF, FF, LF, QF invalid.
+
+ if (s + 2 < ThisTokEnd && s[1] == '1' && s[2] == '6') {
+ s += 2; // success, eat up 2 characters.
+ isFloat16 = true;
+ continue;
+ }
+
isFloat = true;
continue; // Success.
case 'q': // FP Suffix for "__float128"
@@ -681,6 +689,7 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling,
isUnsigned = false;
isLongLong = false;
isFloat = false;
+ isFloat16 = false;
isHalf = false;
isImaginary = false;
MicrosoftInteger = 0;
OpenPOWER on IntegriCloud