diff options
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 35 | ||||
-rw-r--r-- | libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/c++config | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/bits/fs_path.h | 62 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 96 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/cxxabi.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/new | 8 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/pbase_type_info.cc | 13 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc | 47 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc | 56 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc | 2 |
11 files changed, 277 insertions, 65 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 61afd6b78d7..61dafba43e9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,40 @@ +2016-11-07 Jason Merrill <jason@redhat.com> + + * include/bits/c++config (_GLIBCXX_NOEXCEPT_PARM) + (_GLIBCXX_NOEXCEPT_QUAL): New. + * include/std/type_traits (is_function): Use them. + * libsubc++/new (launder): Likewise. + * libsupc++/cxxabi.h (__pbase_type_info::__masks): Add + __noexcept_mask. + * libsupc++/pbase_type_info.cc (__do_catch): Handle function + pointer conversion. + +2016-11-07 François Dumont <fdumont@gcc.gnu.org> + + * config/abi/pre/gnu-versioned-namespace.ver: Export C++17 new of + over-aligned types symbols. + 2016-10-28 Jonathan Wakely <jwakely@redhat.com> + * include/experimental/bits/fs_path.h (__is_path_src) + (_S_range_begin, _S_range_end): Overload to treat string_view as a + Source object. + (path::operator+=, path::compare): Overload for basic_string_view. + * testsuite/experimental/filesystem/path/construct/string_view.cc: + New test. + * testsuite/experimental/filesystem/path/construct/ + string_view_cxx17.cc: New test. + + * include/experimental/bits/fs_path.h + (path::_S_convert<_Iter>(_Iter, _Iter)): Remove cv-qualifiers from + iterator's value_type. + (path::_S_convert<_Iter>(_Iter __first, __null_terminated)): Likewise. + Do not use operation not supported by input iterators. + (path::__is_path_iter_src): Add partial specialization for const + encoded character types. + * testsuite/experimental/filesystem/path/construct/range.cc: Test + construction from input iterators with const value types. + * doc/xml/manual/status_cxx2017.xml: Update status. * doc/html/*: Regenerate. * include/std/type_traits (has_unique_object_representations): Guard diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver index 34d58aea206..bffb35cf26f 100644 --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver @@ -348,6 +348,18 @@ CXXABI_2.0 { # __gnu_cxx::__freeres() _ZN9__gnu_cxx9__freeresEv; + + # C++17 aligned new/delete + _Znw[jmy]St11align_val_t; + _Znw[jmy]St11align_val_tRKSt9nothrow_t; + _Zna[jmy]St11align_val_t; + _Zna[jmy]St11align_val_tRKSt9nothrow_t; + _ZdlPvSt11align_val_t; + _ZdlPvSt11align_val_tRKSt9nothrow_t; + _ZdlPv[jmy]St11align_val_t; + _ZdaPvSt11align_val_t; + _ZdaPvSt11align_val_tRKSt9nothrow_t; + _ZdaPv[jmy]St11align_val_t; }; # Symbols in the support library (libsupc++) supporting trans-mem. diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 6d3226fcd57..8a27d14f951 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -146,6 +146,14 @@ # endif #endif +#if __cpp_noexcept_function_type +#define _GLIBCXX_NOEXCEPT_PARM , bool _N +#define _GLIBCXX_NOEXCEPT_QUAL noexcept (_N) +#else +#define _GLIBCXX_NOEXCEPT_PARM +#define _GLIBCXX_NOEXCEPT_QUAL +#endif + // Macro for extern template, ie controlling template linkage via use // of extern keyword on template declaration. As documented in the g++ // manual, it inhibits all implicit instantiations and is used diff --git a/libstdc++-v3/include/experimental/bits/fs_path.h b/libstdc++-v3/include/experimental/bits/fs_path.h index 4d7291f9f07..70a5445dfa8 100644 --- a/libstdc++-v3/include/experimental/bits/fs_path.h +++ b/libstdc++-v3/include/experimental/bits/fs_path.h @@ -44,6 +44,9 @@ #include <bits/stl_algobase.h> #include <bits/quoted_string.h> #include <bits/locale_conv.h> +#if __cplusplus == 201402L +# include <experimental/string_view> +#endif #if defined(_WIN32) && !defined(__CYGWIN__) # define _GLIBCXX_FILESYSTEM_IS_WINDOWS 1 @@ -61,6 +64,12 @@ inline namespace v1 _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_CXX11 +#if __cplusplus == 201402L + using std::experimental::basic_string_view; +#elif __cplusplus > 201402L + using std::basic_string_view; +#endif + /** * @ingroup filesystem * @{ @@ -87,6 +96,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 static __is_encoded_char<_CharT> __is_path_src(const basic_string<_CharT, _Traits, _Alloc>&, int); +#if __cplusplus >= 201402L + template<typename _CharT, typename _Traits> + static __is_encoded_char<_CharT> + __is_path_src(const basic_string_view<_CharT, _Traits>&, int); +#endif + template<typename _Unknown> static std::false_type __is_path_src(const _Unknown&, ...); @@ -130,6 +145,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _S_range_end(const basic_string<_CharT, _Traits, _Alloc>& __str) { return __str.data() + __str.size(); } +#if __cplusplus >= 201402L + template<typename _CharT, typename _Traits> + static const _CharT* + _S_range_begin(const basic_string_view<_CharT, _Traits>& __str) + { return __str.data(); } + + template<typename _CharT, typename _Traits> + static const _CharT* + _S_range_end(const basic_string_view<_CharT, _Traits>& __str) + { return __str.data() + __str.size(); } +#endif + template<typename _Tp, typename _Iter = decltype(_S_range_begin(std::declval<_Tp>())), typename _Val = typename std::iterator_traits<_Iter>::value_type> @@ -243,6 +270,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 path& operator+=(const string_type& __x); path& operator+=(const value_type* __x); path& operator+=(value_type __x); +#if __cplusplus >= 201402L + path& operator+=(basic_string_view<value_type> __x); +#endif template<typename _Source> _Path<_Source>& @@ -311,6 +341,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 int compare(const path& __p) const noexcept; int compare(const string_type& __s) const; int compare(const value_type* __s) const; +#if __cplusplus >= 201402L + int compare(const basic_string_view<value_type> __s) const; +#endif // decomposition @@ -385,7 +418,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _S_convert(_Iter __first, _Iter __last) { using __value_type = typename std::iterator_traits<_Iter>::value_type; - return _Cvt<__value_type>::_S_convert(__first, __last); + return _Cvt<remove_cv_t<__value_type>>::_S_convert(__first, __last); } template<typename _InputIterator> @@ -393,10 +426,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _S_convert(_InputIterator __src, __null_terminated) { using _Tp = typename std::iterator_traits<_InputIterator>::value_type; - std::basic_string<_Tp> __tmp; - while (*__src != _Tp{}) - __tmp.push_back(*__src++); - return _S_convert(__tmp.data(), __tmp.data() + __tmp.size()); + std::basic_string<remove_cv_t<_Tp>> __tmp; + for (; *__src != _Tp{}; ++__src) + __tmp.push_back(*__src); + return _S_convert(__tmp.c_str(), __tmp.c_str() + __tmp.size()); } static string_type @@ -571,6 +604,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 struct path::__is_encoded_char<char32_t> : std::true_type { using value_type = char32_t; }; + template<typename _Tp> + struct path::__is_encoded_char<const _Tp> : __is_encoded_char<_Tp> { }; + struct path::_Cmpt : path { _Cmpt(string_type __s, _Type __t, size_t __pos) @@ -765,6 +801,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 return *this; } +#if __cplusplus >= 201402L + inline path& + path::operator+=(basic_string_view<value_type> __x) + { + _M_pathname.append(__x.data(), __x.size()); + _M_split_cmpts(); + return *this; + } +#endif + template<typename _CharT> inline path::_Path<_CharT*, _CharT*>& path::operator+=(_CharT __x) @@ -906,6 +952,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 inline int path::compare(const value_type* __s) const { return compare(path(__s)); } +#if __cplusplus >= 201402L + inline int + path::compare(basic_string_view<value_type> __s) const + { return compare(path(__s)); } +#endif + inline path path::filename() const { return empty() ? path() : *--end(); } diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 6824c9eb27e..e5f2bbaf745 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -458,100 +458,100 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_function : public false_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...)> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......)> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) volatile> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) volatile _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) volatile &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) volatile & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) volatile &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) volatile && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) volatile> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) volatile _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) volatile &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) volatile & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) volatile &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) volatile && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const volatile> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const volatile _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const volatile &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const volatile & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes...) const volatile &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes...) const volatile && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const volatile> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const volatile _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const volatile &> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const volatile & _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _ArgTypes> - struct is_function<_Res(_ArgTypes......) const volatile &&> + template<typename _Res, typename... _ArgTypes _GLIBCXX_NOEXCEPT_PARM> + struct is_function<_Res(_ArgTypes......) const volatile && _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; #define __cpp_lib_is_null_pointer 201309 diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxabi.h index f4b8f75fd18..7f1bd996a35 100644 --- a/libstdc++-v3/libsupc++/cxxabi.h +++ b/libstdc++-v3/libsupc++/cxxabi.h @@ -279,7 +279,8 @@ namespace __cxxabiv1 __restrict_mask = 0x4, __incomplete_mask = 0x8, __incomplete_class_mask = 0x10, - __transaction_safe_mask = 0x20 + __transaction_safe_mask = 0x20, + __noexcept_mask = 0x40 }; protected: diff --git a/libstdc++-v3/libsupc++/new b/libstdc++-v3/libsupc++/new index 6bc6c008c18..1e596493815 100644 --- a/libstdc++-v3/libsupc++/new +++ b/libstdc++-v3/libsupc++/new @@ -197,10 +197,10 @@ namespace std // The program is ill-formed if T is a function type or // (possibly cv-qualified) void. - template<typename _Ret, typename... _Args> - void launder(_Ret (*)(_Args...)) = delete; - template<typename _Ret, typename... _Args> - void launder(_Ret (*)(_Args......)) = delete; + template<typename _Ret, typename... _Args _GLIBCXX_NOEXCEPT_PARM> + void launder(_Ret (*)(_Args...) _GLIBCXX_NOEXCEPT_QUAL) = delete; + template<typename _Ret, typename... _Args _GLIBCXX_NOEXCEPT_PARM> + void launder(_Ret (*)(_Args......) _GLIBCXX_NOEXCEPT_QUAL) = delete; void launder(void*) = delete; void launder(const void*) = delete; diff --git a/libstdc++-v3/libsupc++/pbase_type_info.cc b/libstdc++-v3/libsupc++/pbase_type_info.cc index ff6b756519b..b2b9c090097 100644 --- a/libstdc++-v3/libsupc++/pbase_type_info.cc +++ b/libstdc++-v3/libsupc++/pbase_type_info.cc @@ -80,12 +80,13 @@ __do_catch (const type_info *thr_type, unsigned tflags = thrown_type->__flags; - bool throw_tx = (tflags & __transaction_safe_mask); - bool catch_tx = (__flags & __transaction_safe_mask); - if (throw_tx && !catch_tx) - /* Catch can perform a transaction-safety conversion. */ - tflags &= ~__transaction_safe_mask; - if (catch_tx && !throw_tx) + const unsigned fqual_mask = __transaction_safe_mask|__noexcept_mask; + unsigned throw_fqual = (tflags & fqual_mask); + unsigned catch_fqual = (__flags & fqual_mask); + if (throw_fqual & ~catch_fqual) + /* Catch can perform a function pointer conversion. */ + tflags &= catch_fqual; + if (catch_fqual & ~throw_fqual) /* But not the reverse. */ return false; diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc index b68e65d84ef..3dfec2fac5c 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc @@ -24,6 +24,7 @@ #include <experimental/filesystem> #include <string> #include <testsuite_fs.h> +#include <testsuite_iterators.h> using std::experimental::filesystem::path; using __gnu_test::compare_paths; @@ -54,6 +55,52 @@ test01() compare_paths(p1, p7); compare_paths(p1, p8); #endif + + using __gnu_test::test_container; + using __gnu_test::input_iterator_wrapper; + // Test with input iterators and const value_types + test_container<char, input_iterator_wrapper> + r1(&s.front(), &s.front() + s.size()); + path p9(r1.begin(), r1.end()); + compare_paths(p1, p9); + + test_container<char, input_iterator_wrapper> + r2(&s.front(), &s.front() + s.size() + 1); // includes null-terminator + path p10(r2.begin()); + compare_paths(p1, p10); + + test_container<const char, input_iterator_wrapper> + r3(s.c_str(), s.c_str() + s.size()); + path p11(r3.begin(), r3.end()); + compare_paths(p1, p11); + + test_container<const char, input_iterator_wrapper> + r4(s.c_str(), s.c_str() + s.size() + 1); // includes null-terminator + path p12(r4.begin()); + compare_paths(p1, p12); + +#if _GLIBCXX_USE_WCHAR_T + // Test with input iterators and const value_types + test_container<wchar_t, input_iterator_wrapper> + r5(&ws.front(), &ws.front() + ws.size()); + path p13(r5.begin(), r5.end()); + compare_paths(p1, p13); + + test_container<wchar_t, input_iterator_wrapper> + r6(&ws.front(), &ws.front() + ws.size() + 1); // includes null-terminator + path p14(r6.begin()); + compare_paths(p1, p14); + + test_container<const wchar_t, input_iterator_wrapper> + r7(ws.c_str(), ws.c_str() + ws.size()); + path p15(r7.begin(), r7.end()); + compare_paths(p1, p15); + + test_container<const wchar_t, input_iterator_wrapper> + r8(ws.c_str(), ws.c_str() + ws.size() + 1); // includes null-terminator + path p16(r8.begin()); + compare_paths(p1, p16); +#endif } } diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc new file mode 100644 index 00000000000..13ebaaa905a --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc @@ -0,0 +1,56 @@ +// { dg-options "-lstdc++fs -std=gnu++1z" } +// { dg-do run { target c++1z } } +// { dg-require-filesystem-ts "" } + +// Copyright (C) 2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 8.4.1 path constructors [path.construct] + +#include <experimental/filesystem> +#include <string_view> +#include <string> +#include <testsuite_fs.h> + +using std::experimental::filesystem::path; +using __gnu_test::compare_paths; + +void +test01() +{ + for (std::string s : __gnu_test::test_paths) + { + path p1 = s; + std::string_view sv(s); + path p2 = sv; + compare_paths(p1, p2); + +#if _GLIBCXX_USE_WCHAR_T + std::wstring ws(s.begin(), s.end()); + path p3 = ws; + std::wstring_view wsv(ws); + path p4 = wsv; + compare_paths(p1, p4); +#endif + } +} + +int +main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc index 20bc198d5f1..15cebed38f8 100644 --- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc +++ b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc @@ -25,7 +25,7 @@ #include <vector> -// { dg-error "multiple inlined namespaces" "" { target *-*-* } 342 } +// { dg-error "multiple inlined namespaces" "" { target *-*-* } 350 } // "template argument 1 is invalid" // { dg-prune-output "tuple:993" } |