From 227c352bae84b7def117a87af760ac956b717bd3 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 12 Oct 2011 18:51:02 +0000 Subject: [PATCH] We do parse hexfloats in C++11; make it actually work. llvm-svn: 141798 --- clang/lib/Lex/Lexer.cpp | 3 +-- clang/lib/Lex/LiteralSupport.cpp | 3 --- clang/test/Lexer/hexfloat.cpp | 9 ++------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index c7a3df50bca2..802024f79b6f 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -1358,8 +1358,7 @@ void Lexer::LexNumericConstant(Token &Result, const char *CurPtr) { } // If we have a hex FP constant, continue. - if ((C == '-' || C == '+') && (PrevCh == 'P' || PrevCh == 'p') && - !Features.CPlusPlus0x) + if ((C == '-' || C == '+') && (PrevCh == 'P' || PrevCh == 'p')) return LexNumericConstant(Result, ConsumeChar(CurPtr, Size, Result)); // Update the location of token as well as BufferPtr. diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp index 96550e6492bb..70183fd1a0ea 100644 --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -562,9 +562,6 @@ void NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) { } s = first_non_digit; - // In C++0x, we cannot support hexadecmial floating literals because - // they conflict with user-defined literals, so we warn in previous - // versions of C++ by default. if (!PP.getLangOptions().HexFloats) PP.Diag(TokLoc, diag::ext_hexconstant_invalid); } else if (saw_period) { diff --git a/clang/test/Lexer/hexfloat.cpp b/clang/test/Lexer/hexfloat.cpp index 493b64e62740..23daa49ad210 100644 --- a/clang/test/Lexer/hexfloat.cpp +++ b/clang/test/Lexer/hexfloat.cpp @@ -1,9 +1,4 @@ // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s -// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s -// XFAIL: * +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -pedantic %s +float f = 0x1p+1; // expected-warning{{hexadecimal floating constants are a C99 feature}} -#ifndef __GXX_EXPERIMENTAL_CXX0X__ -float f = 0x1p+1; // expected-warning {{incompatible with C++0x}} -#else -float f = 0x1p+1; // expected-warning {{invalid suffix}} -#endif