diff options
author | emsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-08 11:05:43 +0000 |
---|---|---|
committer | emsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-08 11:05:43 +0000 |
commit | 3064627f8924d72a3e5f969d50d983ae9adb83a0 (patch) | |
tree | b2fdb678385f505bec4bf8838849829cfee5707c /libstdc++-v3 | |
parent | 0e81838b26eda898ce85af9d55baea2e30089719 (diff) | |
download | ppe42-gcc-3064627f8924d72a3e5f969d50d983ae9adb83a0.tar.gz ppe42-gcc-3064627f8924d72a3e5f969d50d983ae9adb83a0.zip |
libcpp/
2014-10-08 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* internal.h (lexer_state, spec_nodes): Add in__has_include__.
* directives.c: Support __has_include__ builtin.
* expr.c (parse_has_include): New function to parse __has_include__
builtin; (eval_token()): Use it.
* files.c (_cpp_has_header()): New funtion to look for header;
(open_file_failed()): Not an error to not find a header file for
__has_include__.
* identifiers.c (_cpp_init_hashtable()): Add entry for __has_include__.
* pch.c (cpp_read_state): Lookup __has_include__.
* traditional.c (enum ls, _cpp_scan_out_logical_line()): Walk through
__has_include__ statements.
gcc/c-family/
2014-10-08 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* c-cppbuiltin.c (c_cpp_builtins()): Define language feature
macros and the __has_header macro.
libstdc++-v3/
2014-10-08 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* include/bits/basic_string.h: Add __cpp_lib feature test macro.
* include/bits/stl_algobase.h: Ditto.
* include/bits/stl_function.h: Ditto.
* include/bits/unique_ptr.h: Ditto.
* include/std/chrono: Ditto.
* include/std/complex: Ditto.
* include/std/iomanip: Ditto.
* include/std/shared_mutex: Ditto.
* include/std/tuple: Ditto.
* include/std/type_traits: Ditto.
* include/std/utility: Ditto.
* testsuite/experimental/feat-cxx14.cc: New.
* testsuite/experimental/feat-lib-fund.cc: New.
* testsuite/20_util/declval/requirements/1_neg.cc: Adjust.
* testsuite/20_util/duration/literals/range.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Adjust.
* testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Adjust.
gcc/testsuite/
2014-10-08 Edward Smith-Rowland <3dw4rd@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.C: New.
* g++.dg/cpp1y/feat-cxx98.C: New.
* g++.dg/cpp1y/feat-cxx98-neg.C: New.
* g++.dg/cpp1y/phoobhar.h: New.
* g++.dg/cpp1y/testinc/phoobhar.h: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@215998 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 27 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/basic_string.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_algobase.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_function.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/unique_ptr.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/std/chrono | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/std/complex | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/std/iomanip | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/std/shared_mutex | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/std/tuple | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/std/utility | 9 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/feat-cxx14.cc | 119 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/feat-lib-fund.cc | 25 |
17 files changed, 220 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3bd839fd2ea..af08f41a450 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,30 @@ +2014-10-08 Edward Smith-Rowland <3dw4rd@verizon.net> + + Implement SD-6: SG10 Feature Test Recommendations + * include/bits/basic_string.h: Add __cpp_lib feature test macro. + * include/bits/stl_algobase.h: Ditto. + * include/bits/stl_function.h: Ditto. + * include/bits/unique_ptr.h: Ditto. + * include/std/chrono: Ditto. + * include/std/complex: Ditto. + * include/std/iomanip: Ditto. + * include/std/shared_mutex: Ditto. + * include/std/tuple: Ditto. + * include/std/type_traits: Ditto. + * include/std/utility: Ditto. + * testsuite/experimental/feat-cxx14.cc: New. + * testsuite/experimental/feat-lib-fund.cc: New. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust. + * testsuite/20_util/duration/literals/range.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Adjust. + * testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust. + * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc: + Adjust. + 2014-10-08 Jonathan Wakely <jwakely@redhat.com> * include/bits/regex.h (regex_token_iterator::_M_end_of_seq): Add diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 93ceb6dae5d..89189656bcd 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -3140,6 +3140,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_string_udls 201304 + inline namespace literals { inline namespace string_literals diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 5ff21be98ca..f7c11e931d7 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1091,6 +1091,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO } #if __cplusplus > 201103L + +#define __cpp_lib_robust_nonmodifying_seq_ops 201304 + /** * @brief Tests a range for element-wise equality. * @ingroup non_mutating_algorithms diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h index 8703ce9ae9b..71215b879e5 100644 --- a/libstdc++-v3/include/bits/stl_function.h +++ b/libstdc++-v3/include/bits/stl_function.h @@ -217,6 +217,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_transparent_operators 201210 +//#define __cpp_lib_generic_associative_lookup 201304 + template<> struct plus<void> { diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index c72fbc7dc82..ce38c5a7733 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -743,6 +743,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_make_unique 201304 + template<typename _Tp> struct _MakeUniq { typedef unique_ptr<_Tp> __single_object; }; diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index b114e02f0c2..6e9c7dc9715 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -782,6 +782,8 @@ _GLIBCXX_END_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_chrono_udls 201304 + inline namespace literals { inline namespace chrono_literals diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex index 34fa1ddbcea..941e6b7d845 100644 --- a/libstdc++-v3/include/std/complex +++ b/libstdc++-v3/include/std/complex @@ -1929,6 +1929,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline namespace literals { inline namespace complex_literals { +#define __cpp_lib_complex_udls 201309 + constexpr std::complex<float> operator""if(long double __num) { return std::complex<float>{0.0F, static_cast<float>(__num)}; } diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip index cc6f60cdeeb..9b2cc7a6a92 100644 --- a/libstdc++-v3/include/std/iomanip +++ b/libstdc++-v3/include/std/iomanip @@ -339,6 +339,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_quoted_string_io 201304 + _GLIBCXX_END_NAMESPACE_VERSION namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/std/shared_mutex b/libstdc++-v3/include/std/shared_mutex index 53b39f8251b..6405f1025ec 100644 --- a/libstdc++-v3/include/std/shared_mutex +++ b/libstdc++-v3/include/std/shared_mutex @@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) + +#define __cpp_lib_shared_timed_mutex 201402 + /// shared_timed_mutex class shared_timed_mutex { diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 103c99e066e..9b9cf6b5457 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -774,6 +774,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION tuple<_Elements...>>::type&&>(get<__i>(__t)); } #if __cplusplus > 201103L + +#define __cpp_lib_tuples_by_type 201304 + template<typename _Head, size_t __i, typename... _Tail> constexpr typename __add_ref<_Head>::type __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index e898c9f4e53..ecebfa5c977 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -73,6 +73,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const { return value; } #if __cplusplus > 201103L + +#define __cpp_lib_integral_constant_callable 201304 + constexpr value_type operator()() const { return value; } #endif }; @@ -480,6 +483,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_function<_Res(_ArgTypes......) const volatile &&> : public true_type { }; +#define __cpp_lib_is_null_pointer 201309 + template<typename> struct __is_null_pointer_helper : public false_type { }; @@ -636,6 +641,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201103L /// is_final + #define __cpp_lib_is_final 201402L template<typename _Tp> struct is_final : public integral_constant<bool, __is_final(_Tp)> @@ -1459,6 +1465,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_transformation_trait_aliases 201304 + /// Alias template for remove_const template<typename _Tp> using remove_const_t = typename remove_const<_Tp>::type; @@ -2052,6 +2061,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Sfinae-friendly result_of implementation: +#define __cpp_lib_result_of_sfinae 201210 + // [func.require] paragraph 1 bullet 1: struct __result_of_memfun_ref_impl { diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index 4da92095f11..694220d7b14 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -70,6 +70,7 @@ #include <bits/stl_pair.h> #if __cplusplus >= 201103L + #include <bits/move.h> #include <initializer_list> @@ -153,6 +154,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __pair_get<_Int>::__const_get(__in); } #if __cplusplus > 201103L + +#define __cpp_lib_tuples_by_type 201304 + template <typename _Tp, typename _Up> constexpr _Tp& get(pair<_Tp, _Up>& __p) noexcept @@ -183,6 +187,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION get(pair<_Up, _Tp>&& __p) noexcept { return std::move(__p.second); } +#define __cpp_lib_exchange_function 201304 + /// Assign @p __new_val to @p __obj and return its previous value. template <typename _Tp, typename _Up = _Tp> inline _Tp @@ -216,6 +222,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_integer_sequence 201304 + /// Class template integer_sequence template<typename _Tp, _Tp... _Idx> struct integer_sequence diff --git a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc index a0e3d9300e2..e78e56d358d 100644 --- a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc +++ b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc @@ -19,7 +19,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-error "static assertion failed" "" { target *-*-* } 2044 } +// { dg-error "static assertion failed" "" { target *-*-* } 2053 } #include <utility> diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc index feb9c02b086..eaad899b05f 100644 --- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc @@ -48,5 +48,5 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 40 } // { dg-error "required from here" "" { target *-*-* } 42 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1755 } -// { dg-error "declaration of" "" { target *-*-* } 1719 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1764 } +// { dg-error "declaration of" "" { target *-*-* } 1728 } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc index ad4eb744d12..40811a858b7 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc @@ -48,5 +48,5 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 40 } // { dg-error "required from here" "" { target *-*-* } 42 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1658 } -// { dg-error "declaration of" "" { target *-*-* } 1622 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1667 } +// { dg-error "declaration of" "" { target *-*-* } 1631 } diff --git a/libstdc++-v3/testsuite/experimental/feat-cxx14.cc b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc new file mode 100644 index 00000000000..1c590dd841b --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc @@ -0,0 +1,119 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +#include <utility> +#include <tuple> +#include <memory> +#include <functional> +#include <type_traits> +#include <chrono> +#include <string> +#include <complex> +#include <iomanip> +#include <shared_mutex> + +#ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence" +#elif __cpp_lib_integer_sequence != 201304 +# error "__cpp_lib_integer_sequence != 201304" +#endif + +#ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function" +#elif __cpp_lib_exchange_function != 201304 +# error "__cpp_lib_exchange_function != 201304" +#endif + +#ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type" +#elif __cpp_lib_tuples_by_type != 201304 +# error "__cpp_lib_tuples_by_type != 201304" +#endif + +#ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique" +#elif __cpp_lib_make_unique != 201304 +# error "__cpp_lib_make_unique != 201304" +#endif + +#ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators" +#elif __cpp_lib_transparent_operators != 201210 +# error "__cpp_lib_transparent_operators != 201210" +#endif + +#ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae" +#elif __cpp_lib_result_of_sfinae != 201210 +# error "__cpp_lib_result_of_sfinae != 201210" +#endif + +#ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable" +#elif __cpp_lib_integral_constant_callable != 201304 +# error "__cpp_lib_integral_constant_callable != 201304" +#endif + +#ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases" +#elif __cpp_lib_transformation_trait_aliases != 201304 +# error "__cpp_lib_transformation_trait_aliases != 201304" +#endif + +#ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls" +#elif __cpp_lib_chrono_udls != 201304 +# error "__cpp_lib_chrono_udls != 201304" +#endif + +#ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls" +#elif __cpp_lib_string_udls != 201304 +# error "__cpp_lib_string_udls != 201304" +#endif + +#ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls" +#elif __cpp_lib_complex_udls != 201309 +# error "__cpp_lib_complex_udls != 201309" +#endif + +//#ifndef __cpp_lib_generic_associative_lookup +//# error "__cpp_lib_generic_associative_lookup" +//#elif __cpp_lib_generic_associative_lookup != 201304 +//# error "__cpp_lib_generic_associative_lookup != 201304" +//#endif + +//#ifndef __cpp_lib_null_iterators +//# error "__cpp_lib_null_iterators" +//#elif __cpp_lib_null_iterators != 201304 +//# error "__cpp_lib_null_iterators != 201304" +//#endif + +#ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops" +#elif __cpp_lib_robust_nonmodifying_seq_ops != 201304 +# error "__cpp_lib_robust_nonmodifying_seq_ops != 201304" +#endif + +#ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io" +#elif __cpp_lib_quoted_string_io != 201304 +# error "__cpp_lib_quoted_string_io != 201304" +#endif + +#if !__has_include(<shared_mutex>) +# error "<shared_mutex>" +#endif + +#ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex" +#elif __cpp_lib_shared_timed_mutex != 201402 +# error "__cpp_lib_shared_timed_mutex != 201402" +#endif + +#ifndef __cpp_lib_is_final +# error "__cpp_lib_is_final" +#elif __cpp_lib_is_final != 201402 +# error "__cpp_lib_is_final != 201402" +#endif diff --git a/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc new file mode 100644 index 00000000000..ac8560dfb42 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc @@ -0,0 +1,25 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +#include <experimental/optional> +#include <experimental/string_view> + +#if !__has_include(<experimental/optional>) +# error "<experimental/optional>" +#endif + +//#if !__has_include(<experimental/net>) +//# error "<experimental/net>" +//#endif + +//#if !__has_include(<experimental/any>) +//# error "<experimental/any>" +//#endif + +//#if !__has_include(<experimental/memory_resource>) +//# error "<experimental/memory_resource>" +//#endif + +#if !__has_include(<experimental/string_view>) +# error "<experimental/string_view>" +#endif |