From da73100b48932e7e01669993031fd694ed1590b2 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 26 Jun 2014 14:15:29 -0400 Subject: [PATCH] c-common.h (enum cxx_dialect): Add cxx1z. * c-common.h (enum cxx_dialect): Add cxx1z. * c.opt (std=c++1z, std=c++17, std=gnu++1z, std=gnu++17): New. * c-opts.c (c_common_handle_option, set_std_cxx1z): Handle it. From-SVN: r212042 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.h | 6 ++++-- gcc/c-family/c-opts.c | 25 +++++++++++++++++++++++++ gcc/c-family/c.opt | 16 +++++++++++++++- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 0b23bb38e122..0112bc5c49c3 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2014-06-26 Jason Merrill + + * c-common.h (enum cxx_dialect): Add cxx1z. + * c.opt (std=c++1z, std=c++17, std=gnu++1z, std=gnu++17): New. + * c-opts.c (c_common_handle_option, set_std_cxx1z): Handle it. + 2014-06-23 Marek Polacek Andrew MacLeod diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 8e06487d117a..3e8c8e716f86 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -640,8 +640,10 @@ enum cxx_dialect { /* C++11 */ cxx0x, cxx11 = cxx0x, - /* C++1y (C++17?) */ - cxx1y + /* C++1y (C++14?) */ + cxx1y, + /* C++1z (C++17?) */ + cxx1z }; /* The C++ dialect being used. C++98 is the default. */ diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 97215fc7e858..968b703328b5 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -116,6 +116,7 @@ static void handle_OPT_d (const char *); static void set_std_cxx98 (int); static void set_std_cxx11 (int); static void set_std_cxx1y (int); +static void set_std_cxx1z (int); static void set_std_c89 (int, int); static void set_std_c99 (int); static void set_std_c11 (int); @@ -702,6 +703,16 @@ c_common_handle_option (size_t scode, const char *arg, int value, } break; + case OPT_std_c__1z: + case OPT_std_gnu__1z: + if (!preprocessing_asm_p) + { + set_std_cxx1z (code == OPT_std_c__1z /* ISO */); + if (code == OPT_std_c__1z) + cpp_opts->ext_numeric_literals = 0; + } + break; + case OPT_std_c90: case OPT_std_iso9899_199409: if (!preprocessing_asm_p) @@ -1579,6 +1590,20 @@ set_std_cxx1y (int iso) cxx_dialect = cxx1y; } +/* Set the C++ 201z draft standard (without GNU extensions if ISO). */ +static void +set_std_cxx1z (int iso) +{ + cpp_set_lang (parse_in, iso ? CLK_CXX1Y: CLK_GNUCXX1Y); + flag_no_gnu_keywords = iso; + flag_no_nonansi_builtin = iso; + flag_iso = iso; + /* C++11 includes the C99 standard library. */ + flag_isoc94 = 1; + flag_isoc99 = 1; + cxx_dialect = cxx1z; +} + /* Args to -d specify what to dump. Silently ignore unrecognized options; they may be aimed at toplev.c. */ static void diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 73abd26159a5..1d02bae30635 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1414,6 +1414,13 @@ Conform to the ISO 2014(?) C++ draft standard (experimental and incomplete suppo std=c++14 C++ ObjC++ Alias(std=c++1y) Undocumented +std=c++1z +C++ ObjC++ +Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete support) + +std=c++17 +C++ ObjC++ Alias(std=c++1z) Undocumented + std=c11 C ObjC Conform to the ISO 2011 C standard (experimental and incomplete support) @@ -1458,11 +1465,18 @@ Deprecated in favor of -std=gnu++11 std=gnu++1y C++ ObjC++ -Conform to the ISO 201y(7?) C++ draft standard with GNU extensions (experimental and incomplete support) +Conform to the ISO 201y(4?) C++ draft standard with GNU extensions (experimental and incomplete support) std=gnu++14 C++ ObjC++ Alias(std=gnu++1y) Undocumented +std=gnu++1z +C++ ObjC++ +Conform to the ISO 201z(7?) C++ draft standard with GNU extensions (experimental and incomplete support) + +std=gnu++17 +C++ ObjC++ Alias(std=gnu++1y) Undocumented + std=gnu11 C ObjC Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support) -- 2.43.5