diff options
-rw-r--r-- | gcc/c-family/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 4 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 4 | ||||
-rw-r--r-- | gcc/c-family/c-cppbuiltin.c | 2 | ||||
-rw-r--r-- | gcc/c-family/c-opts.c | 23 | ||||
-rw-r--r-- | gcc/c-family/c.opt | 8 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/lex.c | 2 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 9 |
12 files changed, 80 insertions, 10 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 1b586e5..350ee14 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,14 @@ +2012-03-20 Jason Merrill <jason@redhat.com> + + * c-common.h (enum cxx_dialect): Add cxx1y. + * c-common.c (c_common_nodes_and_builtins): Use >= for cxx_dialect + test. + * c-cppbuiltin.c (c_cpp_builtins): Likewise. + * c-opts.c (c_common_post_options): Likewise. + (set_std_cxx1y): New. + (c_common_handle_option): Call it. + * c.opt (-std=c++1y, -std=gnu++1y): New flags. + 2012-03-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/14710 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index b83f45b..fc83b04 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -4940,7 +4940,7 @@ c_common_nodes_and_builtins (void) { char16_type_node = make_unsigned_type (char16_type_size); - if (cxx_dialect == cxx0x) + if (cxx_dialect >= cxx0x) record_builtin_type (RID_CHAR16, "char16_t", char16_type_node); } @@ -4956,7 +4956,7 @@ c_common_nodes_and_builtins (void) { char32_type_node = make_unsigned_type (char32_type_size); - if (cxx_dialect == cxx0x) + if (cxx_dialect >= cxx0x) record_builtin_type (RID_CHAR32, "char32_t", char32_type_node); } diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 835b13b..8552f0c 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -649,7 +649,9 @@ enum cxx_dialect { cxx03 = cxx98, /* C++11 */ cxx0x, - cxx11 = cxx0x + cxx11 = cxx0x, + /* C++1y (C++17?) */ + cxx1y }; /* The C++ dialect being used. C++98 is the default. */ diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index 40a0a62..49804f9 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -714,7 +714,7 @@ c_cpp_builtins (cpp_reader *pfile) cpp_define (pfile, "__DEPRECATED"); if (flag_rtti) cpp_define (pfile, "__GXX_RTTI"); - if (cxx_dialect == cxx0x) + if (cxx_dialect >= cxx0x) cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__"); } /* Note that we define this for C as well, so that we know if diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index f2a7971..0ee4390 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -111,6 +111,7 @@ static size_t include_cursor; 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_c89 (int, int); static void set_std_c99 (int); static void set_std_c11 (int); @@ -774,6 +775,12 @@ c_common_handle_option (size_t scode, const char *arg, int value, set_std_cxx11 (code == OPT_std_c__11 /* ISO */); break; + case OPT_std_c__1y: + case OPT_std_gnu__1y: + if (!preprocessing_asm_p) + set_std_cxx1y (code == OPT_std_c__11 /* ISO */); + break; + case OPT_std_c90: case OPT_std_iso9899_199409: if (!preprocessing_asm_p) @@ -990,7 +997,7 @@ c_common_post_options (const char **pfilename) if (warn_implicit_function_declaration == -1) warn_implicit_function_declaration = flag_isoc99; - if (cxx_dialect == cxx0x) + if (cxx_dialect >= cxx0x) { /* If we're allowing C++0x constructs, don't warn about C++98 identifiers which are keywords in C++0x. */ @@ -1522,6 +1529,20 @@ set_std_cxx11 (int iso) cxx_dialect = cxx11; } +/* Set the C++ 201y draft standard (without GNU extensions if ISO). */ +static void +set_std_cxx1y (int iso) +{ + cpp_set_lang (parse_in, iso ? CLK_CXX11: CLK_GNUCXX11); + 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 = cxx1y; +} + /* 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 1ec5504..f785b60 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1215,6 +1215,10 @@ std=c++0x C++ ObjC++ Alias(std=c++11) Deprecated in favor of -std=c++11 +std=c++1y +C++ ObjC++ +Conform to the ISO 201y(7?) C++ draft standard (experimental and incomplete support) + std=c11 C ObjC Conform to the ISO 2011 C standard (experimental and incomplete support) @@ -1257,6 +1261,10 @@ std=gnu++0x C++ ObjC++ Alias(std=gnu++11) 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) + std=gnu11 C ObjC Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8dcc4462..370fd7a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2012-03-20 Jason Merrill <jason@redhat.com> + * lex.c (init_reswords): Use >= for cxx_dialect test. + * parser.c (cp_parser_exception_specification_opt): Likewise. + * mangle.c (write_type): Handle 'auto'. * init.c (build_new): Don't do auto deduction where it might affect template mangling. diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index c11e3b3..a79448e 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -174,7 +174,7 @@ init_reswords (void) tree id; int mask = 0; - if (cxx_dialect != cxx0x) + if (cxx_dialect < cxx0x) mask |= D_CXX0X; if (flag_no_asm) mask |= D_ASM | D_EXT; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index b3c87a8..75b7bdb 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -19594,7 +19594,7 @@ cp_parser_exception_specification_opt (cp_parser* parser) #if 0 /* Enable this once a lot of code has transitioned to noexcept? */ - if (cxx_dialect == cxx0x && !in_system_header) + if (cxx_dialect >= cxx0x && !in_system_header) warning (OPT_Wdeprecated, "dynamic exception specifications are " "deprecated in C++0x; use %<noexcept%> instead"); #endif diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c744cb9..82f0d30 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1597,20 +1597,36 @@ GNU dialect of ISO C11. Support is incomplete and experimental. The name @samp{gnu1x} is deprecated. @item c++98 -The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for -C++ code. +@itemx c++03 +The 1998 ISO C++ standard plus the 2003 technical corrigendum and some +additional defect reports. Same as @option{-ansi} for C++ code. @item gnu++98 +@itemx gnu++03 GNU dialect of @option{-std=c++98}. This is the default for C++ code. @item c++11 +@itemx c++0x The 2011 ISO C++ standard plus amendments. Support for C++11 is still experimental, and may change in incompatible ways in future releases. +The name @samp{c++0x} is deprecated. @item gnu++11 +@itemx gnu++0x GNU dialect of @option{-std=c++11}. Support for C++11 is still experimental, and may change in incompatible ways in future releases. +The name @samp{gnu++0x} is deprecated. + +@item c++1y +The next revision of the ISO C++ standard, tentatively planned for +2017. Support is highly experimental, and will almost certainly +change in incompatible ways in future releases. + +@item gnu++1y +GNU dialect of @option{-std=c++1y}. Support is highly experimental, +and will almost certainly change in incompatible ways in future +releases. @end table @item -fgnu89-inline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 71f1fe7..3501168 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2012-03-20 Jason Merrill <jason@redhat.com> + * lib/target-supports.exp: Add { target c++1y }. + * g++.dg/cpp0x/auto32.C: New. 2012-03-20 Georg-Johann Lay <avr@gjlay.de> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index b9a6601..23b6ea9 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4431,11 +4431,18 @@ proc check_effective_target_c++11 { } { return [check-flags { { } { } { -std=c++0x -std=gnu++0x -std=c++11 -std=gnu++11 } }] } +proc check_effective_target_c++1y { } { + if ![check_effective_target_c++] { + return 0 + } + return [check-flags { { } { } { -std=c++1y -std=gnu++1y } }] +} + proc check_effective_target_c++98 { } { if ![check_effective_target_c++] { return 0 } - return [check-flags { { } { } { } { -std=c++0x -std=gnu++0x -std=c++11 -std=gnu++11 } }] + return [check-flags { { } { } { } { -std=c++0x -std=gnu++0x -std=c++11 -std=gnu++11 -std=c++1y -std=gnu++1y } }] } # Return 1 if expensive testcases should be run. |