Commit 129211bc by Jason Merrill Committed by Jason Merrill

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

gcc/c-family/
	* c-common.h (enum cxx_dialect): Add cxx_unset.
	* c-common.c (cxx_dialect): Initialize to cxx_unset.
	* c-opts.c (c_common_post_options): Set C++ dialect to C++98 if unset.
gcc/testsuite/
	* lib/target-supports.exp (cxx_default): New global.
	(check_effective_target_c++11_only)
	(check_effective_target_c++14_only)
	(check_effective_target_c++98_only)
	(check_effective_target_c++1z_only): Check it.

From-SVN: r222977
parent 381bf11e
2015-05-09 Jason Merrill <jason@redhat.com> 2015-05-09 Jason Merrill <jason@redhat.com>
* c-common.h (enum cxx_dialect): Add cxx_unset.
* c-common.c (cxx_dialect): Initialize to cxx_unset.
* c-opts.c (c_common_post_options): Set C++ dialect to C++98 if unset.
* c.opt (std=c++14): Remove Undocumented flag and experimental warning. * c.opt (std=c++14): Remove Undocumented flag and experimental warning.
(std=gnu++0x): Mark as Undocumented. (std=gnu++0x): Mark as Undocumented.
(std=gnu++1y): Add deprecated message. (std=gnu++1y): Add deprecated message.
......
...@@ -256,9 +256,9 @@ const char *constant_string_class_name; ...@@ -256,9 +256,9 @@ const char *constant_string_class_name;
int flag_use_repository; int flag_use_repository;
/* The C++ dialect being used. C++98 is the default. */ /* The C++ dialect being used. Default set in c_common_post_options. */
enum cxx_dialect cxx_dialect = cxx98; enum cxx_dialect cxx_dialect = cxx_unset;
/* Maximum template instantiation depth. This limit exists to limit the /* Maximum template instantiation depth. This limit exists to limit the
time it takes to notice excessively recursive template instantiations. time it takes to notice excessively recursive template instantiations.
......
...@@ -671,6 +671,7 @@ extern int flag_use_repository; ...@@ -671,6 +671,7 @@ extern int flag_use_repository;
/* The supported C++ dialects. */ /* The supported C++ dialects. */
enum cxx_dialect { enum cxx_dialect {
cxx_unset,
/* C++98 with TC1 */ /* C++98 with TC1 */
cxx98, cxx98,
cxx03 = cxx98, cxx03 = cxx98,
......
...@@ -896,6 +896,10 @@ c_common_post_options (const char **pfilename) ...@@ -896,6 +896,10 @@ c_common_post_options (const char **pfilename)
if (flag_abi_version == 0) if (flag_abi_version == 0)
flag_abi_version = 8; flag_abi_version = 8;
/* Set C++ standard to C++98 if not specified on the command line. */
if (c_dialect_cxx () && cxx_dialect == cxx_unset)
set_std_cxx98 (/*ISO*/false);
if (cxx_dialect >= cxx11) if (cxx_dialect >= cxx11)
{ {
/* If we're allowing C++0x constructs, don't warn about C++98 /* If we're allowing C++0x constructs, don't warn about C++98
......
2015-05-09 Jason Merrill <jason@redhat.com>
* lib/target-supports.exp (cxx_default): New global.
(check_effective_target_c++11_only)
(check_effective_target_c++14_only)
(check_effective_target_c++98_only)
(check_effective_target_c++1z_only): Check it.
2015-05-09 Marc Glisse <marc.glisse@inria.fr> 2015-05-09 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/64454 PR tree-optimization/64454
......
...@@ -5892,15 +5892,23 @@ proc check_effective_target_c++ { } { ...@@ -5892,15 +5892,23 @@ proc check_effective_target_c++ { } {
return 0 return 0
} }
set cxx_default "c++98"
# Check whether the current active language standard supports the features # Check whether the current active language standard supports the features
# of C++11/C++14 by checking for the presence of one of the -std # of C++11/C++14 by checking for the presence of one of the -std flags.
# flags. This assumes that the default for the compiler is C++98, and that # This assumes that the default for the compiler is $cxx_default, and that
# there will never be multiple -std= arguments on the command line. # there will never be multiple -std= arguments on the command line.
proc check_effective_target_c++11_only { } { proc check_effective_target_c++11_only { } {
global cxx_default
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return [check-flags { { } { } { -std=c++0x -std=gnu++0x -std=c++11 -std=gnu++11 } }] if [check-flags { { } { } { -std=c++0x -std=gnu++0x -std=c++11 -std=gnu++11 } }] {
return 1
}
if { $cxx_default == "c++11" && [check-flags { { } { } { } { -std=* } }] } {
return 1
}
return 0
} }
proc check_effective_target_c++11 { } { proc check_effective_target_c++11 { } {
if [check_effective_target_c++11_only] { if [check_effective_target_c++11_only] {
...@@ -5912,14 +5920,21 @@ proc check_effective_target_c++11_down { } { ...@@ -5912,14 +5920,21 @@ proc check_effective_target_c++11_down { } {
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return ![check_effective_target_c++14] return [expr ![check_effective_target_c++14] ]
} }
proc check_effective_target_c++14_only { } { proc check_effective_target_c++14_only { } {
global cxx_default
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return [check-flags { { } { } { -std=c++14 -std=gnu++14 -std=c++14 -std=gnu++14 } }] if [check-flags { { } { } { -std=c++14 -std=gnu++14 -std=c++14 -std=gnu++14 } }] {
return 1
}
if { $cxx_default == "c++14" && [check-flags { { } { } { } { -std=* } }] } {
return 1
}
return 0
} }
proc check_effective_target_c++14 { } { proc check_effective_target_c++14 { } {
...@@ -5932,21 +5947,35 @@ proc check_effective_target_c++14_down { } { ...@@ -5932,21 +5947,35 @@ proc check_effective_target_c++14_down { } {
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return ![check_effective_target_c++1z] return [expr ![check_effective_target_c++1z] ]
} }
proc check_effective_target_c++98_only { } { proc check_effective_target_c++98_only { } {
global cxx_default
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return ![check_effective_target_c++11] if [check-flags { { } { } { -std=c++98 -std=gnu++98 -std=c++03 -std=gnu++03 } }] {
return 1
}
if { $cxx_default == "c++98" && [check-flags { { } { } { } { -std=* } }] } {
return 1
}
return 0
} }
proc check_effective_target_c++1z_only { } { proc check_effective_target_c++1z_only { } {
global cxx_default
if ![check_effective_target_c++] { if ![check_effective_target_c++] {
return 0 return 0
} }
return [check-flags { { } { } { -std=c++1z -std=gnu++1z } }] if [check-flags { { } { } { -std=c++17 -std=gnu++17 -std=c++1z -std=gnu++1z } }] {
return 1
}
if { $cxx_default == "c++17" && [check-flags { { } { } { } { -std=* } }] } {
return 1
}
return 0
} }
proc check_effective_target_c++1z { } { proc check_effective_target_c++1z { } {
return [check_effective_target_c++1z_only] return [check_effective_target_c++1z_only]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment