+2016-10-03 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/68323
+ PR libstdc++/77794
+ * config/abi/pre/gnu-versioned-namespace.ver: Add export for
+ __cxa_thread_atexit.
+ * include/Makefile.am: Add <experimental/lfts_config.h>
+ * include/Makefile.in: Regenerate.
+ * src/filesystem/Makefile.in: Likewise.
+ * 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/experimental/fs_fwd.h: Declare versioned namespace.
+ * include/experimental/lfts_config.h: Declare versioned namespaces.
+ * include/experimental/algorithm: Include
+ <experimental/lfts_config.h>.
+ * include/experimental/any: Likewise.
+ * include/experimental/chrono: Likewise.
+ * include/experimental/functional: Likewise.
+ * include/experimental/optional: Likewise.
+ * include/experimental/ratio: Likewise.
+ * include/experimental/system_error: Likewise.
+ * include/experimental/tuple: Likewise.
+ * include/experimental/type_traits: Likewise.
+ * include/experimental/string_view: Likewise. Fix nesting of
+ versioned namespaces.
+ * include/experimental/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/ext/profile/mutex_extensions_neg.cc: Likewise.
+
2016-09-28 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/77686
__cxa_guard_release;
__cxa_pure_virtual;
__cxa_rethrow;
+ __cxa_thread_atexit;
__cxa_throw;
__cxa_type_match;
__cxa_vec_cctor;
${experimental_srcdir}/any \
${experimental_srcdir}/chrono \
${experimental_srcdir}/functional \
+ ${experimental_srcdir}/lfts_config.h \
${experimental_srcdir}/optional \
${experimental_srcdir}/ratio \
${experimental_srcdir}/string_view \
${experimental_srcdir}/any \
${experimental_srcdir}/chrono \
${experimental_srcdir}/functional \
+ ${experimental_srcdir}/lfts_config.h \
${experimental_srcdir}/optional \
${experimental_srcdir}/ratio \
${experimental_srcdir}/string_view \
{ };
#endif
+_GLIBCXX_END_NAMESPACE_VERSION
+
#if __cplusplus > 201103L
#define __cpp_lib_string_udls 201304
{
inline namespace string_literals
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_DEFAULT_ABI_TAG
inline basic_string<char>
{ return basic_string<char32_t>{__str, __len}; }
#endif
+_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace string_literals
} // inline namespace literals
#endif // __cplusplus > 201103L
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
namespace placeholders { }
namespace regex_constants { }
namespace this_thread { }
-
- namespace experimental { }
+ inline namespace literals {
+ inline namespace chrono_literals { }
+ inline namespace complex_literals { }
+ inline namespace string_literals { }
+ }
}
namespace abi { }
namespace regex_constants { 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 { } }
}
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool>
- friend bool
- __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
- const basic_regex<_Cp, _Rp>&,
- regex_constants::match_flag_type);
+ friend bool __detail::
+#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>&,
+ regex_constants::match_flag_type);
template<typename, typename, typename, bool>
friend class __detail::_Executor;
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool>
- friend bool
- __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
- const basic_regex<_Cp, _Rp>&,
- regex_constants::match_flag_type);
+ friend bool __detail::
+#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>&,
+ regex_constants::match_flag_type);
void
_M_resize(unsigned int __size)
namespace std _GLIBCXX_VISIBILITY(default)
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
namespace __detail
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
/* Determine whether number is a power of 2. */
template<typename _Tp>
inline bool
{
return ((__x - 1) & __x) == 0;
};
+_GLIBCXX_END_NAMESPACE_VERSION
}
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/**
* @brief Uniform discrete distribution for random numbers.
*
#include <algorithm>
#include <random>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
#include <new>
#include <utility>
#include <type_traits>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
#else
#include <chrono>
-
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
{
inline namespace v1
{
+#if _GLIBCXX_INLINE_VERSION
+inline namespace __7 { }
+#endif
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#if _GLIBCXX_USE_CXX11_ABI
- inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
#endif
/**
#include <vector>
#include <array>
#include <bits/stl_algo.h>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
--- /dev/null
+// 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/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 { } }
+inline namespace literals { inline namespace string_view_literals {
+ inline namespace __7 { }
+} } // namespace literals::string_view_literals
+} // namespace experimental
+} // namespace std
+#endif
+#endif
#include <bits/functexcept.h>
#include <bits/functional_hash.h>
#include <bits/enable_special_members.h>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
#else
#include <ratio>
-
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
inline namespace fundamentals_v1
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// See C++14 §20.11.5, ratio comparison
template <typename _R1, typename _R2>
constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value;
#include <string>
#include <limits>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
namespace experimental
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// I added these EMSR.
inline namespace literals
{
inline namespace string_view_literals
{
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline constexpr basic_string_view<char>
operator""sv(const char* __str, size_t __len)
{ return basic_string_view<char32_t>{__str, __len}; }
#endif
- }
- }
-
-_GLIBCXX_END_NAMESPACE_VERSION
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace string_literals
+ } // namespace literals
} // namespace experimental
} // namespace std
{
namespace experimental
{
+inline namespace fundamentals_v1
+{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits>
}
_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace fundamentals_v1
} // namespace experimental
} // namespace std
#else
#include <system_error>
-
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
inline namespace fundamentals_v1
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// See C++14 §19.5, System error support
template <typename _Tp>
constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value;
template <typename _Tp>
constexpr bool is_error_condition_enum_v =
is_error_condition_enum<_Tp>::value;
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
#else
#include <tuple>
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
#else
#include <type_traits>
-
+#include <experimental/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
{
inline namespace chrono_literals
{
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Rep, unsigned long long _Val>
struct _Checked_integral_constant
operator""ns()
{ return __check_overflow<chrono::nanoseconds, _Digits...>(); }
+ _GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace chrono_literals
} // inline namespace literals
conj(_Tp __x)
{ return __x; }
+_GLIBCXX_END_NAMESPACE_VERSION
+
#if __cplusplus > 201103L
inline namespace literals {
inline namespace complex_literals {
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
#define __cpp_lib_complex_udls 201309
operator""il(unsigned long long __num)
{ return std::complex<long double>{0.0L, static_cast<long double>(__num)}; }
+_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace complex_literals
} // inline namespace literals
#endif // C++14
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif // C++11
# -I/-D flags to pass when compiling.
-AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS)
+AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
toolexeclib_LTLIBRARIES = libstdc++fs.la
headers =
@ENABLE_DUAL_ABI_FALSE@cxx11_abi_sources =
--- /dev/null
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// 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 *-*-* } 63 }
// std::numeric_limits<int64_t>::max() == 9223372036854775807;
auto h = 9223372036854775808h;
- // { dg-error "cannot be represented" "" { target *-*-* } 796 }
+ // { dg-error "cannot be represented" "" { target *-*-* } 797 }
}
using std::experimental::any_cast;
const any y(1);
- any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 310 }
+ any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 311 }
}
#include <vector>
-// { dg-error "multiple inlined namespaces" "" { target *-*-* } 322 }
+// { dg-error "multiple inlined namespaces" "" { target *-*-* } 329 }