c-common.h (enum cxx_dialect): Add cxx1y.

* 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 }.

From-SVN: r185596
This commit is contained in:
Jason Merrill 2012-03-21 01:09:41 -04:00 committed by Jason Merrill
parent c19267cbaf
commit 552b8185be
12 changed files with 80 additions and 10 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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.