Fix a bug handling hex floats in c90 mode, pointed out by Neil.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44120 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Lex/LiteralSupport.cpp b/Lex/LiteralSupport.cpp
index c0027f2..21ead21 100644
--- a/Lex/LiteralSupport.cpp
+++ b/Lex/LiteralSupport.cpp
@@ -224,7 +224,7 @@
}
// A binary exponent can appear with or with a '.'. If dotted, the
// binary exponent is required.
- if (*s == 'p' || *s == 'P') {
+ if ((*s == 'p' || *s == 'P') && PP.getLangOptions().HexFloats) {
s++;
saw_exponent = true;
if (*s == '+' || *s == '-') s++; // sign
diff --git a/test/Lexer/c90.c b/test/Lexer/c90.c
new file mode 100644
index 0000000..84d3046
--- /dev/null
+++ b/test/Lexer/c90.c
@@ -0,0 +1,5 @@
+// RUN: clang -std=c90 -fsyntax-only %s -verify
+
+enum { cast_hex = (long) (
+ 0x0p-1 /* expected-error {{invalid suffix 'p' on integer constant}} */
+ ) };