This is the second round of the SD-6 support series. I believe I have answered everyones concerns.
Built and tested on x86_64-linux. OK?
libstdc++: 2014-06-09 Ed Smith-Rowland <3dw...@verizon.net> Implement SD-6: SG10 Feature Test Recommendations * g++.dg/cpp1y/feat-cxx11-neg.C: New. * g++.dg/cpp1y/feat-cxx11.C: New. * g++.dg/cpp1y/feat-cxx14-neg.C: New. * g++.dg/cpp1y/feat-cxx14.C: New. * g++.dg/cpp1y/phoobhar.h: New. * g++.dg/cpp1y/testinc/phoobhar.h: New. * g++.dg/cpp1y/testinc/phoobhar.h: New.
Index: g++.dg/cpp1y/feat-cxx11-neg.C =================================================================== --- g++.dg/cpp1y/feat-cxx11-neg.C (revision 0) +++ g++.dg/cpp1y/feat-cxx11-neg.C (working copy) @@ -0,0 +1,35 @@ +// { dg-do compile { target c++11_only } } + +// These *are* defined in C++14 onwards. + +#ifndef __cpp_binary_literals +# error "__cpp_binary_literals" // { dg-error "error" } +#endif + +#ifndef __cpp_init_captures +# error "__cpp_init_captures" // { dg-error "error" } +#endif + +#ifndef __cpp_generic_lambdas +# error "__cpp_generic_lambdas" // { dg-error "error" } +#endif + +#ifndef __cpp_decltype_auto +# error "__cpp_decltype_auto" // { dg-error "error" } +#endif + +#ifndef __cpp_return_type_deduction +# error "__cpp_return_type_deduction" // { dg-error "error" } +#endif + +#ifndef __cpp_runtime_arrays +# error "__cpp_runtime_arrays" // { dg-error "error" } +#endif + +#ifndef __cpp_digit_separators +# error "__cpp_digit_separators" // { dg-error "error" } +#endif + +#ifndef __cpp_attribute_deprecated +# error "__cpp_attribute_deprecated" // { dg-error "error" } +#endif Index: g++.dg/cpp1y/feat-cxx11.C =================================================================== --- g++.dg/cpp1y/feat-cxx11.C (revision 0) +++ g++.dg/cpp1y/feat-cxx11.C (working copy) @@ -0,0 +1,73 @@ +// { dg-do compile { target c++11_only } } + +#ifndef __cpp_unicode_characters +# error "__cpp_unicode_characters" +#elif __cpp_unicode_characters != 200704 +# error "__cpp_unicode_characters != 200704" +#endif + +#ifndef __cpp_raw_strings +# error "__cpp_raw_strings" +#elif __cpp_raw_strings != 200710 +# error "__cpp_raw_strings != 200710" +#endif + +#ifndef __cpp_unicode_literals +# error "__cpp_unicode_literals" +#elif __cpp_unicode_literals != 200710 +# error "__cpp_unicode_literals != 200710" +#endif + +#ifndef __cpp_user_defined_literals +# error "__cpp_user_defined_literals" +#elif __cpp_user_defined_literals != 200809 +# error "__cpp_user_defined_literals != 200809" +#endif + +#ifndef __cpp_lambdas +# error "__cpp_lambdas" +#elif __cpp_lambdas != 200907 +# error "__cpp_lambdas != 200907" +#endif + +#ifndef __cpp_constexpr +# error "__cpp_constexpr" +#elif __cpp_constexpr != 200704 +# error "__cpp_constexpr != 200704" +#endif + +#ifndef __cpp_static_assert +# error "__cpp_static_assert" +#elif __cpp_static_assert != 200410 +# error "__cpp_static_assert != 200410" +#endif + +#ifndef __cpp_decltype +# error "__cpp_decltype" +#elif __cpp_decltype != 200707 +# error "__cpp_decltype != 200707" +#endif + +#ifndef __cpp_attributes +# error "__cpp_attributes" +#elif __cpp_attributes != 200809 +# error "__cpp_attributes != 200809" +#endif + +#ifndef __cpp_rvalue_reference +# error "__cpp_rvalue_reference" +#elif __cpp_rvalue_reference != 200610 +# error "__cpp_rvalue_reference != 200610" +#endif + +#ifndef __cpp_variadic_templates +# error "__cpp_variadic_templates" +#elif __cpp_variadic_templates != 200704 +# error "__cpp_variadic_templates != 200704" +#endif + +#ifndef __cpp_alias_templates +# error "__cpp_alias_templates" +#elif __cpp_alias_templates != 200704 +# error "__cpp_alias_templates != 200704" +#endif Index: g++.dg/cpp1y/feat-cxx14-neg.C =================================================================== --- g++.dg/cpp1y/feat-cxx14-neg.C (revision 0) +++ g++.dg/cpp1y/feat-cxx14-neg.C (working copy) @@ -0,0 +1,8 @@ +// { dg-do compile { target c++1y } } + +// TODO: Change != to == when C++14 constexpr goes in. +#ifndef __cpp_constexpr +# error "__cpp_constexpr" +#elif __cpp_constexpr != 200704 +# error "__cpp_constexpr != 200704" // { dg-error "error" } +#endif Index: g++.dg/cpp1y/feat-cxx14.C =================================================================== --- g++.dg/cpp1y/feat-cxx14.C (revision 0) +++ g++.dg/cpp1y/feat-cxx14.C (working copy) @@ -0,0 +1,187 @@ +// { dg-do compile { target c++1y } } +// { dg-options "-I . -I testinc" } + +// Begin C++11 tests. + +#ifndef __cpp_unicode_characters +# error "__cpp_unicode_characters" +#endif + +#ifndef __cpp_raw_strings +# error "__cpp_raw_strings" +#endif + +#ifndef __cpp_unicode_literals +# error "__cpp_unicode_literals" +#endif + +#ifndef __cpp_user_defined_literals +# error "__cpp_user_defined_literals" +#endif + +#ifndef __cpp_lambdas +# error "__cpp_lambdas" +#endif + +#ifndef __cpp_constexpr +# error "__cpp_constexpr" +#endif + +#ifndef __cpp_static_assert +# error "__cpp_static_assert" +#endif + +#ifndef __cpp_decltype +# error "__cpp_decltype" +#endif + +#ifndef __cpp_attributes +# error "__cpp_attributes" +#endif + +#ifndef __cpp_rvalue_reference +# error "__cpp_rvalue_reference" +#endif + +#ifndef __cpp_variadic_templates +# error "__cpp_variadic_templates" +#endif + +// Begin C++14 tests. + +#ifndef __cpp_binary_literals +# error "__cpp_binary_literals" +#endif + +#ifndef __cpp_init_captures +# error "__cpp_init_captures" +#endif + +#ifndef __cpp_generic_lambdas +# error "__cpp_generic_lambdas" +#endif + +// TODO: Change <= to < when C++14 constexpr goes in. +#ifdef __cpp_constexpr +# if __cpp_constexpr <= 201304 +# error "__cpp_constexpr" +# endif +#endif + +#ifndef __cpp_decltype_auto +# error "__cpp_decltype_auto" +#endif + +#ifndef __cpp_return_type_deduction +# error "__cpp_return_type_deduction" +#endif + +#ifndef __cpp_runtime_arrays +# error "__cpp_runtime_arrays" +#endif + +// Aggregate initializers not in yet. +#ifdef __cpp_aggregate_nsdmi +# error "__cpp_aggregate_nsdmi" +#endif + +// Variable templates not in yet. +#ifdef __cpp_variable_templates +# error "__cpp_variable_templates" +#endif + +#ifndef __cpp_digit_separators +# error "__cpp_digit_separators" +#endif + +#ifndef __cpp_attribute_deprecated +# error "__cpp_attribute_deprecated" +#endif + +// Sized deallocation not in yet. +#ifdef __cpp_sized_deallocation +# error "__cpp_sized_deallocation" +#endif + +// Begin include checks. + +// Check for __has_include macro. +#ifndef __has_include +# error "__has_include" +#endif + +// Quoted complex.h should find at least the bracket version (use operator). +#if __has_include__ "complex.h" +#else +# error "complex.h" +#endif + +// Try known bracket header (use operator). +#if __has_include__(<complex>) +#else +# error "<complex>" +#endif + +// Define and use a macro to invoke the operator. +#define sluggo(TXT) __has_include__(TXT) + +#if sluggo(<complex>) +#else +# error "<complex>" +#endif + +#if ! sluggo(<complex>) +# error "<complex>" +#else +#endif + +// Quoted complex.h should find at least the bracket version. +#if __has_include("complex.h") +#else +# error "complex.h" +#endif + +// Try known local quote header. +#if __has_include("complex_literals.h") +#else +# error "\"complex_literals.h\"" +#endif + +// Try nonexistent bracket header. +#if __has_include(<stuff>) +# error "<stuff>" +#else +#endif + +// Try nonexistent quote header. +#if __has_include("phlegm") +# error "\"phlegm\"" +#else +#endif + +// Test __has_include_next. +#if __has_include("phoobhar.h") +# include "phoobhar.h" +#else +# error "phoobhar.h" +#endif + +// Try a macro. +#define COMPLEX_INC "complex.h" +#if __has_include(COMPLEX_INC) +#else +# error COMPLEX_INC +#endif + +// Realistic use of __has_include. +#if __has_include(<array>) +# define STD_ARRAY 1 +# include <array> + template<typename _Tp, size_t _Num> + using array = std::array<_Tp, _Num>; +#elif __has_include(<tr1/array>) +# define TR1_ARRAY 1 +# include <tr1/array> + template<typename _Tp, size_t _Num> + typedef std::tr1::array<_Tp, _Num> array; +#endif Index: g++.dg/cpp1y/phoobhar.h =================================================================== --- g++.dg/cpp1y/phoobhar.h (revision 0) +++ g++.dg/cpp1y/phoobhar.h (working copy) @@ -0,0 +1,16 @@ + +int +phoo(); + +int +bhar(); + +#ifndef __has_include_next +# error "__has_include_next" +#else +# if __has_include_next("phoobhar.h") +# include_next "phoobhar.h" +# else +# error "phoobhar.h" +# endif +#endif Index: g++.dg/cpp1y/testinc/phoobhar.h =================================================================== Index: g++.dg/cpp1y/testinc/phoobhar.h ===================================================================