From: jason Date: Tue, 15 Mar 2016 12:08:31 +0000 (+0000) Subject: * libcpp/expr.c (cpp_classify_number): Hex floats are new in C++1z. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=14c36b1402b82304739e865a27cb1aed0d87ec73;p=thirdparty%2Fgcc.git * libcpp/expr.c (cpp_classify_number): Hex floats are new in C++1z. * libcpp/init.c (lang_defaults): Likewise. * gcc/c-family/c-cppbuiltin.c (c_cpp_builtins): Set __cpp_hex_float. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234213 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 620c8069e0d9..d00d9d90947d 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,5 +1,7 @@ 2016-03-14 Jason Merrill + * c-cppbuiltin.c (c_cpp_builtins): Set __cpp_hex_float. + * c-cppbuiltin.c (c_cpp_builtins): Bump __cpp_range_based_for. 2016-03-09 Richard Biener diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index dc1f426c7a87..ee953ca44c82 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -818,6 +818,10 @@ c_cpp_builtins (cpp_reader *pfile) if (!pedantic || cxx_dialect > cxx11) cpp_define (pfile, "__cpp_binary_literals=201304"); + /* Similarly for hexadecimal floating point literals and C++17. */ + if (!pedantic || cpp_get_options (parse_in)->extended_numbers) + cpp_define (pfile, "__cpp_hex_float=201603"); + /* Arrays of runtime bound were removed from C++14, but we still support GNU VLAs. Let's define this macro to a low number (corresponding to the initial test release of GNU C++) if we won't diff --git a/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C b/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C index 39d9fe4d1e02..a0e468c5e627 100644 --- a/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C +++ b/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C @@ -1,4 +1,4 @@ // { dg-do compile { target c++98_only } } /* { dg-options "-ansi -pedantic-errors" } */ -double x = 0x3.1415babep0; // { dg-error "use of C..11 hexadecimal floating constant" } +double x = 0x3.1415babep0; // { dg-error "use of C..1z hexadecimal floating constant" } diff --git a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C index c25db24d2140..3dc358f4e4bf 100644 --- a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C +++ b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C @@ -337,3 +337,9 @@ #elif __cpp_nontype_template_args != 201411 # error "__cpp_nontype_template_args != 201411" #endif + +#ifndef __cpp_hex_float +# error "__cpp_hex_float" +#elif __cpp_hex_float != 201603 +# error "__cpp_hex_float != 201603" +#endif diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 19b9310bb864..a2cb02f68a56 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,8 @@ +2016-03-14 Jason Merrill + + * expr.c (cpp_classify_number): Hex floats are new in C++1z. + * init.c (lang_defaults): Likewise. + 2016-03-09 David Malcolm PR c/68473 diff --git a/libcpp/expr.c b/libcpp/expr.c index 5353bdeff0d5..5cdca6f1bec6 100644 --- a/libcpp/expr.c +++ b/libcpp/expr.c @@ -552,7 +552,7 @@ cpp_classify_number (cpp_reader *pfile, const cpp_token *token, { if (CPP_OPTION (pfile, cplusplus)) cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0, - "use of C++11 hexadecimal floating constant"); + "use of C++1z hexadecimal floating constant"); else cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0, "use of C99 hexadecimal floating constant"); diff --git a/libcpp/init.c b/libcpp/init.c index 6bc429604703..4343075ba852 100644 --- a/libcpp/init.c +++ b/libcpp/init.c @@ -105,9 +105,9 @@ static const struct lang_flags lang_defaults[] = /* GNUCXX */ { 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, /* CXX98 */ { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0 }, /* GNUCXX11 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0 }, - /* CXX11 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 }, + /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 }, /* GNUCXX14 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, - /* CXX14 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, /* GNUCXX1Z */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1 }, /* CXX1Z */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 }, /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }