summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2012-03-21 05:09:41 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2012-03-21 05:09:41 +0000
commit543efdbea6e840bc1374b5ad36a3ebb2644b20ca (patch)
tree9106f53126560094c079914853af9d31398a04a7
parent1610993e39e7c0db9b77a87f512229d4385168ba (diff)
downloadgcc-543efdbea6e840bc1374b5ad36a3ebb2644b20ca.tar.gz
* 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. cp/ * lex.c (init_reswords): Use >= for cxx_dialect test. * parser.c (cp_parser_exception_specification_opt): Likewise. testsuite/ * lib/target-supports.exp: Add { target c++1y }. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185596 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/c-family/ChangeLog11
-rw-r--r--gcc/c-family/c-common.c4
-rw-r--r--gcc/c-family/c-common.h4
-rw-r--r--gcc/c-family/c-cppbuiltin.c2
-rw-r--r--gcc/c-family/c-opts.c23
-rw-r--r--gcc/c-family/c.opt8
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/lex.c2
-rw-r--r--gcc/cp/parser.c2
-rw-r--r--gcc/doc/invoke.texi20
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/lib/target-supports.exp9
12 files changed, 80 insertions, 10 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 1b586e505b9..350ee14b90d 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 b83f45b9d2c..fc83b04c8a1 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 835b13bbce8..8552f0c92e9 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 40a0a620dbf..49804f98146 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 f2a7971781d..0ee4390d589 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 1ec5504d5e4..f785b606155 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 8dcc4462d04..370fd7abd63 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 c11e3b31561..a79448ea549 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 b3c87a8047d..75b7bdb046a 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 c744cb96192..82f0d30ce6f 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 71f1fe7ed77..3501168e94d 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 b9a6601c54d..23b6ea94406 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.