From 91b78382b51bb19e4023da4ef1818f146b7018dc Mon Sep 17 00:00:00 2001 From: Alexis Hunt Date: Sun, 10 Jan 2010 23:37:56 +0000 Subject: Do not parse hexadecimal floating point literals in C++0x mode because they are incompatible with user-defined literals, specifically with the following form: 0x1p+1 The preprocessing-number token extends only as far as the 'p'; the '+' is not included. Previously we could get away with this extension as p was an invalid suffix, but now with user-defined literals, 'p' might well be a valid suffix and we are forced to consider it as such. This patch also adds a warning in non-0x C++ modes telling the user that this extension is incompatible with C++0x that is enabled by default (previously and with other languages, we warn only with a compliance option such as -pedantic). llvm-svn: 93135 --- clang/test/Lexer/hexfloat.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 clang/test/Lexer/hexfloat.cpp (limited to 'clang/test') diff --git a/clang/test/Lexer/hexfloat.cpp b/clang/test/Lexer/hexfloat.cpp new file mode 100644 index 00000000000..5a62556ff61 --- /dev/null +++ b/clang/test/Lexer/hexfloat.cpp @@ -0,0 +1,8 @@ +//RUN: %clang_cc1 -fsyntax-only -verify +//RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify + +#ifndef __GXX_EXPERIMENTAL_CXX0X__ +float f = 0x1p+1; // expected-warning {{incompatible with C++0x}} +#else +float f = 0x1p+1; // expected-warning {{invalid suffix}} +#endif -- cgit v1.2.3