Commit e347987d by Jonathan Wakely Committed by Jonathan Wakely

Fix libstdc++ versioned namespace build

	PR libstdc++/68323
	PR libstdc++/77794
	* config/abi/pre/gnu-versioned-namespace.ver: Add exports for
	__cxa_thread_atexit and __gnu_cxx::__freeres.
	* include/Makefile.am: Add <experimental/bits/lfts_config.h>
	* include/Makefile.in: Regenerate.
	* include.bits/basic_string.h: Fix nesting of versioned namespaces.
	* include/bits/c++config: Declare versioned namespaces for literals.
	* include/bits/regex.h (basic_regex, match_results): Add workarounds
	for PR c++/59256.
	* include/bits/uniform_int_dist.h: Fix nesting of versioned namespace.
	* include/std/chrono: Likewise.
	* include/std/complex: Likewise.
	* include/std/string_view: Likewise.
	* include/std/variant: Likewise. Add workaround for PR c++/59256.
	* include/experimental/bits/fs_fwd.h: Declare versioned namespace.
	* include/experimental/bits/lfts_config.h: Declare versioned
	namespaces.
	* include/experimental/algorithm: Include
	<experimental/bits/lfts_config.h>.
	* include/experimental/any: Likewise.
	* include/experimental/bits/erase_if.h: Likewise.
	* include/experimental/chrono: Likewise.
	* include/experimental/functional: Likewise.
	* include/experimental/memory_resource: Likewise.
	* include/experimental/optional: Likewise.
	* include/experimental/propagate_const: Likewise.
	* include/experimental/random: Likewise.
	* include/experimental/ratio: Likewise.
	* include/experimental/system_error: Likewise.
	* include/experimental/tuple: Likewise.
	* include/experimental/type_traits: Likewise.
	* include/experimental/utility: Likewise.
	* include/experimental/string_view: Likewise. Fix nesting of
	versioned namespaces.
	* include/experimental/bits/string_view.tcc: Reopen inline namespace
	for non-inline function definitions.
	* testsuite/17_intro/using_namespace_std_exp_neg.cc: New test.
	* testsuite/20_util/duration/literals/range.cc: Adjust dg-error line.
	* testsuite/experimental/any/misc/any_cast_neg.cc: Likewise.
	* testsuite/experimental/propagate_const/assignment/move_neg.cc:
	Likewise.
	* testsuite/experimental/propagate_const/cons/move_neg.cc: Likewise.
	* testsuite/experimental/propagate_const/requirements2.cc: Likewise.
	* testsuite/experimental/propagate_const/requirements3.cc: Likewise.
	* testsuite/experimental/propagate_const/requirements4.cc: Likewise.
	* testsuite/experimental/propagate_const/requirements5.cc: Likewise.
	* testsuite/ext/profile/mutex_extensions_neg.cc: Likewise.

From-SVN: r240714
parent 1adae327
2016-10-03 Jonathan Wakely <jwakely@redhat.com> 2016-10-03 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/68323
PR libstdc++/77794
* config/abi/pre/gnu-versioned-namespace.ver: Add exports for
__cxa_thread_atexit and __gnu_cxx::__freeres.
* include/Makefile.am: Add <experimental/bits/lfts_config.h>
* include/Makefile.in: Regenerate.
* include.bits/basic_string.h: Fix nesting of versioned namespaces.
* include/bits/c++config: Declare versioned namespaces for literals.
* include/bits/regex.h (basic_regex, match_results): Add workarounds
for PR c++/59256.
* include/bits/uniform_int_dist.h: Fix nesting of versioned namespace.
* include/std/chrono: Likewise.
* include/std/complex: Likewise.
* include/std/string_view: Likewise.
* include/std/variant: Likewise. Add workaround for PR c++/59256.
* include/experimental/bits/fs_fwd.h: Declare versioned namespace.
* include/experimental/bits/lfts_config.h: Declare versioned
namespaces.
* include/experimental/algorithm: Include
<experimental/bits/lfts_config.h>.
* include/experimental/any: Likewise.
* include/experimental/bits/erase_if.h: Likewise.
* include/experimental/chrono: Likewise.
* include/experimental/functional: Likewise.
* include/experimental/memory_resource: Likewise.
* include/experimental/optional: Likewise.
* include/experimental/propagate_const: Likewise.
* include/experimental/random: Likewise.
* include/experimental/ratio: Likewise.
* include/experimental/system_error: Likewise.
* include/experimental/tuple: Likewise.
* include/experimental/type_traits: Likewise.
* include/experimental/utility: Likewise.
* include/experimental/string_view: Likewise. Fix nesting of
versioned namespaces.
* include/experimental/bits/string_view.tcc: Reopen inline namespace
for non-inline function definitions.
* testsuite/17_intro/using_namespace_std_exp_neg.cc: New test.
* testsuite/20_util/duration/literals/range.cc: Adjust dg-error line.
* testsuite/experimental/any/misc/any_cast_neg.cc: Likewise.
* testsuite/experimental/propagate_const/assignment/move_neg.cc:
Likewise.
* testsuite/experimental/propagate_const/cons/move_neg.cc: Likewise.
* testsuite/experimental/propagate_const/requirements2.cc: Likewise.
* testsuite/experimental/propagate_const/requirements3.cc: Likewise.
* testsuite/experimental/propagate_const/requirements4.cc: Likewise.
* testsuite/experimental/propagate_const/requirements5.cc: Likewise.
* testsuite/ext/profile/mutex_extensions_neg.cc: Likewise.
PR libstdc++/77814 PR libstdc++/77814
* include/bits/std_abs.h: Use "C++" language linkage. * include/bits/std_abs.h: Use "C++" language linkage.
* testsuite/17_intro/headers/c++2011/linkage.cc: Move <complex.h> to * testsuite/17_intro/headers/c++2011/linkage.cc: Move <complex.h> to
......
...@@ -187,6 +187,7 @@ CXXABI_2.0 { ...@@ -187,6 +187,7 @@ CXXABI_2.0 {
__cxa_guard_release; __cxa_guard_release;
__cxa_pure_virtual; __cxa_pure_virtual;
__cxa_rethrow; __cxa_rethrow;
__cxa_thread_atexit;
__cxa_throw; __cxa_throw;
__cxa_type_match; __cxa_type_match;
__cxa_vec_cctor; __cxa_vec_cctor;
...@@ -344,6 +345,9 @@ CXXABI_2.0 { ...@@ -344,6 +345,9 @@ CXXABI_2.0 {
_ZdlPv[jmy]; _ZdlPv[jmy];
# operator delete[](void*, std::size_t) # operator delete[](void*, std::size_t)
_ZdaPv[jmy]; _ZdaPv[jmy];
# __gnu_cxx::__freeres()
_ZN9__gnu_cxx9__freeresEv;
}; };
# Symbols in the support library (libsupc++) supporting trans-mem. # Symbols in the support library (libsupc++) supporting trans-mem.
......
...@@ -692,6 +692,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits ...@@ -692,6 +692,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits
experimental_bits_builddir = ./experimental/bits experimental_bits_builddir = ./experimental/bits
experimental_bits_headers = \ experimental_bits_headers = \
${experimental_bits_srcdir}/erase_if.h \ ${experimental_bits_srcdir}/erase_if.h \
${experimental_bits_srcdir}/lfts_config.h \
${experimental_bits_srcdir}/shared_ptr.h \ ${experimental_bits_srcdir}/shared_ptr.h \
${experimental_bits_srcdir}/string_view.tcc \ ${experimental_bits_srcdir}/string_view.tcc \
${experimental_bits_filesystem_headers} ${experimental_bits_filesystem_headers}
......
...@@ -982,6 +982,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits ...@@ -982,6 +982,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits
experimental_bits_builddir = ./experimental/bits experimental_bits_builddir = ./experimental/bits
experimental_bits_headers = \ experimental_bits_headers = \
${experimental_bits_srcdir}/erase_if.h \ ${experimental_bits_srcdir}/erase_if.h \
${experimental_bits_srcdir}/lfts_config.h \
${experimental_bits_srcdir}/shared_ptr.h \ ${experimental_bits_srcdir}/shared_ptr.h \
${experimental_bits_srcdir}/string_view.tcc \ ${experimental_bits_srcdir}/string_view.tcc \
${experimental_bits_filesystem_headers} ${experimental_bits_filesystem_headers}
......
...@@ -6091,6 +6091,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -6091,6 +6091,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ }; { };
#endif #endif
_GLIBCXX_END_NAMESPACE_VERSION
#if __cplusplus > 201103L #if __cplusplus > 201103L
#define __cpp_lib_string_udls 201304 #define __cpp_lib_string_udls 201304
...@@ -6099,6 +6101,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -6099,6 +6101,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
inline namespace string_literals inline namespace string_literals
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_DEFAULT_ABI_TAG
inline basic_string<char> inline basic_string<char>
...@@ -6124,12 +6127,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -6124,12 +6127,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return basic_string<char32_t>{__str, __len}; } { return basic_string<char32_t>{__str, __len}; }
#endif #endif
_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace string_literals } // inline namespace string_literals
} // inline namespace literals } // inline namespace literals
#endif // __cplusplus > 201103L #endif // __cplusplus > 201103L
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std } // namespace std
#endif // C++11 #endif // C++11
......
...@@ -187,8 +187,11 @@ ...@@ -187,8 +187,11 @@
namespace placeholders { } namespace placeholders { }
namespace regex_constants { } namespace regex_constants { }
namespace this_thread { } namespace this_thread { }
inline namespace literals {
namespace experimental { } inline namespace chrono_literals { }
inline namespace complex_literals { }
inline namespace string_literals { }
}
} }
namespace abi { } namespace abi { }
...@@ -273,9 +276,16 @@ namespace std ...@@ -273,9 +276,16 @@ namespace std
namespace regex_constants { inline namespace __7 { } } namespace regex_constants { inline namespace __7 { } }
namespace this_thread { inline namespace __7 { } } namespace this_thread { inline namespace __7 { } }
namespace experimental { inline namespace __7 { } } inline namespace literals {
inline namespace chrono_literals { inline namespace __7 { } }
inline namespace complex_literals { inline namespace __7 { } }
inline namespace string_literals { inline namespace __7 { } }
}
namespace __detail { inline namespace __7 { } } namespace __detail {
inline namespace __7 { }
namespace __variant { inline namespace __7 { } }
}
} }
namespace __gnu_cxx namespace __gnu_cxx
......
...@@ -769,8 +769,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 ...@@ -769,8 +769,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp, template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool> __detail::_RegexExecutorPolicy, bool>
friend bool friend bool __detail::
__detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&, #if _GLIBCXX_INLINE_VERSION
__7:: // Required due to PR c++/59256
#endif
__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
const basic_regex<_Cp, _Rp>&, const basic_regex<_Cp, _Rp>&,
regex_constants::match_flag_type); regex_constants::match_flag_type);
...@@ -1860,8 +1863,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 ...@@ -1860,8 +1863,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp, template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool> __detail::_RegexExecutorPolicy, bool>
friend bool friend bool __detail::
__detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&, #if _GLIBCXX_INLINE_VERSION
__7:: // Required due to PR c++/59256
#endif
__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
const basic_regex<_Cp, _Rp>&, const basic_regex<_Cp, _Rp>&,
regex_constants::match_flag_type); regex_constants::match_flag_type);
......
...@@ -36,10 +36,10 @@ ...@@ -36,10 +36,10 @@
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
namespace __detail namespace __detail
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/* Determine whether number is a power of 2. */ /* Determine whether number is a power of 2. */
template<typename _Tp> template<typename _Tp>
inline bool inline bool
...@@ -47,8 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -47,8 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
return ((__x - 1) & __x) == 0; return ((__x - 1) & __x) == 0;
}; };
_GLIBCXX_END_NAMESPACE_VERSION
} }
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/** /**
* @brief Uniform discrete distribution for random numbers. * @brief Uniform discrete distribution for random numbers.
* A discrete random distribution on the range @f$[min, max]@f$ with equal * A discrete random distribution on the range @f$[min, max]@f$ with equal
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <algorithm> #include <algorithm>
#include <random> #include <random>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <new> #include <new>
#include <utility> #include <utility>
#include <type_traits> #include <type_traits>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#if __cplusplus <= 201103L #if __cplusplus <= 201103L
# include <bits/c++14_warning.h> # include <bits/c++14_warning.h>
#else #else
#include <experimental/bits/lfts_config.h>
namespace std namespace std
{ {
......
...@@ -46,10 +46,13 @@ namespace filesystem ...@@ -46,10 +46,13 @@ namespace filesystem
{ {
inline namespace v1 inline namespace v1
{ {
#if _GLIBCXX_INLINE_VERSION
inline namespace __7 { }
#endif
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
#if _GLIBCXX_USE_CXX11_ABI #if _GLIBCXX_USE_CXX11_ABI
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
#endif #endif
/** /**
......
// Namespace declarations for Library Fundamentals TS -*- C++ -*-
// 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.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file experimental/bits/lfts_config.h
* This is an internal header file, included by other library headers.
* Do not attempt to use it directly.
*/
#if __cplusplus <= 201103L
# include <bits/c++14_warning.h>
#else
#include <bits/c++config.h>
#if _GLIBCXX_INLINE_VERSION
namespace std _GLIBCXX_VISIBILITY(default)
{
namespace chrono
{
namespace experimental
{
inline namespace fundamentals_v1 { inline namespace __7 { } }
inline namespace fundamentals_v2 { inline namespace __7 { } }
} // namespace experimental
} // namespace chrono
namespace experimental
{
inline namespace fundamentals_v1 { inline namespace __7 { } }
inline namespace fundamentals_v2 {
inline namespace __7 { }
namespace pmr { inline namespace __7 { } }
} // namespace fundamentals_v2
inline namespace literals { inline namespace string_view_literals {
inline namespace __7 { }
} } // namespace literals::string_view_literals
} // namespace experimental
} // namespace std
#endif
#endif
...@@ -44,6 +44,8 @@ namespace std _GLIBCXX_VISIBILITY(default) ...@@ -44,6 +44,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
{ {
namespace experimental namespace experimental
{ {
inline namespace fundamentals_v1
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
...@@ -222,6 +224,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -222,6 +224,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} }
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental } // namespace experimental
} // namespace std } // namespace std
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#else #else
#include <chrono> #include <chrono>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#ifdef _GLIBCXX_PARALLEL #ifdef _GLIBCXX_PARALLEL
# include <parallel/algorithm> // For std::__parallel::search # include <parallel/algorithm> // For std::__parallel::search
#endif #endif
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <atomic> #include <atomic>
#include <cstddef> #include <cstddef>
#include <bits/alloc_traits.h> #include <bits/alloc_traits.h>
#include <experimental/bits/lfts_config.h>
namespace std { namespace std {
namespace experimental { namespace experimental {
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <bits/functexcept.h> #include <bits/functexcept.h>
#include <bits/functional_hash.h> #include <bits/functional_hash.h>
#include <bits/enable_special_members.h> #include <bits/enable_special_members.h>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <type_traits> #include <type_traits>
#include <functional> #include <functional>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#define _GLIBCXX_EXPERIMENTAL_RANDOM 1 #define _GLIBCXX_EXPERIMENTAL_RANDOM 1
#include <random> #include <random>
#include <experimental/bits/lfts_config.h>
namespace std { namespace std {
namespace experimental { namespace experimental {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#else #else
#include <ratio> #include <ratio>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
...@@ -49,6 +49,7 @@ namespace experimental ...@@ -49,6 +49,7 @@ namespace experimental
inline namespace fundamentals_v1 inline namespace fundamentals_v1
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
// See C++14 §20.11.5, ratio comparison // See C++14 §20.11.5, ratio comparison
template <typename _R1, typename _R2> template <typename _R1, typename _R2>
constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value;
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <string> #include <string>
#include <limits> #include <limits>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
...@@ -651,13 +652,12 @@ _GLIBCXX_END_NAMESPACE_VERSION ...@@ -651,13 +652,12 @@ _GLIBCXX_END_NAMESPACE_VERSION
namespace experimental namespace experimental
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// I added these EMSR. // I added these EMSR.
inline namespace literals inline namespace literals
{ {
inline namespace string_view_literals inline namespace string_view_literals
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
inline constexpr basic_string_view<char> inline constexpr basic_string_view<char>
operator""sv(const char* __str, size_t __len) operator""sv(const char* __str, size_t __len)
...@@ -679,10 +679,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -679,10 +679,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return basic_string_view<char32_t>{__str, __len}; } { return basic_string_view<char32_t>{__str, __len}; }
#endif #endif
} _GLIBCXX_END_NAMESPACE_VERSION
} } // namespace string_literals
} // namespace literals
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace experimental } // namespace experimental
} // namespace std } // namespace std
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#else #else
#include <system_error> #include <system_error>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
...@@ -49,12 +49,14 @@ namespace experimental ...@@ -49,12 +49,14 @@ namespace experimental
inline namespace fundamentals_v1 inline namespace fundamentals_v1
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
// See C++14 §19.5, System error support // See C++14 §19.5, System error support
template <typename _Tp> template <typename _Tp>
constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value;
template <typename _Tp> template <typename _Tp>
constexpr bool is_error_condition_enum_v = constexpr bool is_error_condition_enum_v =
is_error_condition_enum<_Tp>::value; is_error_condition_enum<_Tp>::value;
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1 } // namespace fundamentals_v1
} // namespace experimental } // namespace experimental
......
...@@ -36,7 +36,9 @@ ...@@ -36,7 +36,9 @@
#else #else
#include <tuple> #include <tuple>
#include <functional>
#include <bits/invoke.h> #include <bits/invoke.h>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#else #else
#include <type_traits> #include <type_traits>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <utility> #include <utility>
#include <bits/uses_allocator.h> #include <bits/uses_allocator.h>
#include <experimental/bits/lfts_config.h>
namespace std { namespace std {
namespace experimental { namespace experimental {
......
...@@ -881,6 +881,7 @@ _GLIBCXX_END_NAMESPACE_VERSION ...@@ -881,6 +881,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
{ {
inline namespace chrono_literals inline namespace chrono_literals
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Rep, unsigned long long _Val> template<typename _Rep, unsigned long long _Val>
struct _Checked_integral_constant struct _Checked_integral_constant
...@@ -956,6 +957,7 @@ _GLIBCXX_END_NAMESPACE_VERSION ...@@ -956,6 +957,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
operator""ns() operator""ns()
{ return __check_overflow<chrono::nanoseconds, _Digits...>(); } { return __check_overflow<chrono::nanoseconds, _Digits...>(); }
_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace chrono_literals } // inline namespace chrono_literals
} // inline namespace literals } // inline namespace literals
......
...@@ -1932,10 +1932,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -1932,10 +1932,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
conj(_Tp __x) conj(_Tp __x)
{ return __x; } { return __x; }
_GLIBCXX_END_NAMESPACE_VERSION
#if __cplusplus > 201103L #if __cplusplus > 201103L
inline namespace literals { inline namespace literals {
inline namespace complex_literals { inline namespace complex_literals {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#define __cpp_lib_complex_udls 201309 #define __cpp_lib_complex_udls 201309
...@@ -1963,12 +1966,12 @@ inline namespace complex_literals { ...@@ -1963,12 +1966,12 @@ inline namespace complex_literals {
operator""il(unsigned long long __num) operator""il(unsigned long long __num)
{ return std::complex<long double>{0.0L, static_cast<long double>(__num)}; } { return std::complex<long double>{0.0L, static_cast<long double>(__num)}; }
_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace complex_literals } // inline namespace complex_literals
} // inline namespace literals } // inline namespace literals
#endif // C++14 #endif // C++14
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace } // namespace
#endif // C++11 #endif // C++11
......
...@@ -427,10 +427,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -427,10 +427,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t _M_len; size_t _M_len;
const _CharT* _M_str; const _CharT* _M_str;
}; };
_GLIBCXX_END_NAMESPACE_VERSION
// [string.view.comparison], non-member basic_string_view comparison function // [string.view.comparison], non-member basic_string_view comparison function
_GLIBCXX_END_NAMESPACE_VERSION
namespace __detail namespace __detail
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
...@@ -445,8 +444,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -445,8 +444,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp> template<typename _Tp>
using __idt = typename __identity<_Tp>::type; using __idt = typename __identity<_Tp>::type;
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} }
_GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
...@@ -639,8 +639,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -639,8 +639,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_fast_hash<hash<u32string_view>> : std::false_type struct __is_fast_hash<hash<u32string_view>> : std::false_type
{ }; { };
#endif #endif
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} // namespace std } // namespace std
......
...@@ -85,10 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -85,10 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr size_t variant_npos = -1; constexpr size_t variant_npos = -1;
_GLIBCXX_END_NAMESPACE_VERSION
namespace __detail namespace __detail
{ {
namespace __variant namespace __variant
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Returns the first apparence of _Tp in _Types. // Returns the first apparence of _Tp in _Types.
// Returns sizeof...(_Types) if _Tp is not in _Types. // Returns sizeof...(_Types) if _Tp is not in _Types.
template<typename _Tp, typename... _Types> template<typename _Tp, typename... _Types>
...@@ -725,9 +728,12 @@ namespace __variant ...@@ -725,9 +728,12 @@ namespace __variant
} }
}; };
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __variant } // namespace __variant
} // namespace __detail } // namespace __detail
_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp, typename... _Types> template<typename _Tp, typename... _Types>
inline constexpr bool holds_alternative(const variant<_Types...>& __v) inline constexpr bool holds_alternative(const variant<_Types...>& __v)
noexcept noexcept
...@@ -1250,7 +1256,11 @@ namespace __variant ...@@ -1250,7 +1256,11 @@ namespace __variant
} }
template<typename _Vp> template<typename _Vp>
friend void* __detail::__variant::__get_storage(_Vp&& __v); friend void* __detail::__variant::
#if _GLIBCXX_INLINE_VERSION
__7:: // Required due to PR c++/59256
#endif
__get_storage(_Vp&& __v);
}; };
// To honor algebraic data type, variant<> should be a bottom type, which // To honor algebraic data type, variant<> should be a bottom type, which
......
// { dg-do compile { target c++11 } }
// 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/>.
#include <algorithm>
#include <array>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <random>
#include <regex>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <tuple>
#include <typeinfo>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <valarray>
#include <vector>
namespace gnu
{
using namespace std::experimental; // { dg-error "is not a namespace-name" }
}
// { dg-error "expected namespace-name before" "" { target *-*-* } 62 }
...@@ -26,5 +26,5 @@ test01() ...@@ -26,5 +26,5 @@ test01()
// std::numeric_limits<int64_t>::max() == 9223372036854775807; // std::numeric_limits<int64_t>::max() == 9223372036854775807;
auto h = 9223372036854775808h; auto h = 9223372036854775808h;
// { dg-error "cannot be represented" "" { target *-*-* } 889 } // { dg-error "cannot be represented" "" { target *-*-* } 890 }
} }
...@@ -25,5 +25,5 @@ void test01() ...@@ -25,5 +25,5 @@ void test01()
using std::experimental::any_cast; using std::experimental::any_cast;
const any y(1); const any y(1);
any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 368 } any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 369 }
} }
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
using std::unique_ptr; using std::unique_ptr;
// { dg-error "no type" "" { target *-*-* } 158 } // { dg-error "no type" "" { target *-*-* } 159 }
int main() int main()
{ {
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
using std::unique_ptr; using std::unique_ptr;
// { dg-error "no type" "" { target *-*-* } 117 } // { dg-error "no type" "" { target *-*-* } 118 }
// { dg-error "no type" "" { target *-*-* } 124 } // { dg-error "no type" "" { target *-*-* } 125 }
// { dg-error "no type" "" { target *-*-* } 133 } // { dg-error "no type" "" { target *-*-* } 134 }
// { dg-error "no type" "" { target *-*-* } 142 } // { dg-error "no type" "" { target *-*-* } 143 }
int main() int main()
{ {
......
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 } // { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
// { dg-error "not a pointer-to-object type" "" { target *-*-* } 65 } // { dg-error "not a pointer-to-object type" "" { target *-*-* } 66 }
// { dg-error "forming pointer to reference type" "" { target *-*-* } 184 } // { dg-error "forming pointer to reference type" "" { target *-*-* } 185 }
// { dg-error "forming pointer to reference type" "" { target *-*-* } 210 } // { dg-error "forming pointer to reference type" "" { target *-*-* } 211 }
propagate_const<void*> test1; propagate_const<void*> test1;
...@@ -21,6 +21,6 @@ ...@@ -21,6 +21,6 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 } // { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
propagate_const<void (*)()> test1; propagate_const<void (*)()> test1;
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 } // { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
// { dg-error "invalid type" "" { target *-*-* } 65 } // { dg-error "invalid type" "" { target *-*-* } 66 }
// { dg-error "uninitialized reference member" "" { target *-*-* } 111 } // { dg-error "uninitialized reference member" "" { target *-*-* } 112 }
propagate_const<int&> test1; // { dg-error "use of deleted function" } propagate_const<int&> test1; // { dg-error "use of deleted function" }
...@@ -21,6 +21,6 @@ ...@@ -21,6 +21,6 @@
using std::experimental::propagate_const; using std::experimental::propagate_const;
// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 } // { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
propagate_const<int[1]> test1; propagate_const<int[1]> test1;
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <vector> #include <vector>
// { dg-error "multiple inlined namespaces" "" { target *-*-* } 332 } // { dg-error "multiple inlined namespaces" "" { target *-*-* } 342 }
// "template argument 1 is invalid" // "template argument 1 is invalid"
// { dg-prune-output "tuple:993" } // { dg-prune-output "tuple:993" }
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