Fix libstdc++ versioned namespace build
authorJonathan Wakely <jwakely@redhat.com>
Mon, 3 Oct 2016 14:35:28 +0000 (15:35 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 3 Oct 2016 14:35:28 +0000 (15:35 +0100)
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

40 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
libstdc++-v3/include/Makefile.am
libstdc++-v3/include/Makefile.in
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/include/bits/c++config
libstdc++-v3/include/bits/regex.h
libstdc++-v3/include/bits/uniform_int_dist.h
libstdc++-v3/include/experimental/algorithm
libstdc++-v3/include/experimental/any
libstdc++-v3/include/experimental/bits/erase_if.h
libstdc++-v3/include/experimental/bits/fs_fwd.h
libstdc++-v3/include/experimental/bits/lfts_config.h [new file with mode: 0644]
libstdc++-v3/include/experimental/bits/string_view.tcc
libstdc++-v3/include/experimental/chrono
libstdc++-v3/include/experimental/functional
libstdc++-v3/include/experimental/memory_resource
libstdc++-v3/include/experimental/optional
libstdc++-v3/include/experimental/propagate_const
libstdc++-v3/include/experimental/random
libstdc++-v3/include/experimental/ratio
libstdc++-v3/include/experimental/string_view
libstdc++-v3/include/experimental/system_error
libstdc++-v3/include/experimental/tuple
libstdc++-v3/include/experimental/type_traits
libstdc++-v3/include/experimental/utility
libstdc++-v3/include/std/chrono
libstdc++-v3/include/std/complex
libstdc++-v3/include/std/string_view
libstdc++-v3/include/std/variant
libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/duration/literals/range.cc
libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc
libstdc++-v3/testsuite/experimental/propagate_const/assignment/move_neg.cc
libstdc++-v3/testsuite/experimental/propagate_const/cons/move_neg.cc
libstdc++-v3/testsuite/experimental/propagate_const/requirements2.cc
libstdc++-v3/testsuite/experimental/propagate_const/requirements3.cc
libstdc++-v3/testsuite/experimental/propagate_const/requirements4.cc
libstdc++-v3/testsuite/experimental/propagate_const/requirements5.cc
libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc

index 8c744356325e1a46a2253aef3faebb0f8f472cf5..7753c85d585352fd9a55f4cf2dd42371a979cc83 100644 (file)
@@ -1,5 +1,54 @@
 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
        * include/bits/std_abs.h: Use "C++" language linkage.
        * testsuite/17_intro/headers/c++2011/linkage.cc: Move <complex.h> to
index 65866a380f3b3b0eabfdc11100a14843ea3c27fa..34d58aea206a0362f559c95f1b457be06ef6edc6 100644 (file)
@@ -187,6 +187,7 @@ CXXABI_2.0 {
     __cxa_guard_release;
     __cxa_pure_virtual;
     __cxa_rethrow;
+    __cxa_thread_atexit;
     __cxa_throw;
     __cxa_type_match;
     __cxa_vec_cctor;
@@ -344,6 +345,9 @@ CXXABI_2.0 {
     _ZdlPv[jmy];
     # operator delete[](void*, std::size_t)
     _ZdaPv[jmy];
+
+    # __gnu_cxx::__freeres()
+    _ZN9__gnu_cxx9__freeresEv;
 };
 
 # Symbols in the support library (libsupc++) supporting trans-mem.
index 4e63fbb438bf0ae333c4d93eb40e55b6798f1cb1..bb4a5329280b045f3db3bc6d98272b76b2b70b3c 100644 (file)
@@ -692,6 +692,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits
 experimental_bits_builddir = ./experimental/bits
 experimental_bits_headers = \
        ${experimental_bits_srcdir}/erase_if.h \
+       ${experimental_bits_srcdir}/lfts_config.h \
        ${experimental_bits_srcdir}/shared_ptr.h \
        ${experimental_bits_srcdir}/string_view.tcc \
        ${experimental_bits_filesystem_headers}
index 8b788b551c417b5b21aff48ba3827356d8a068cc..3bef9d0453704e3436f5a62ed77350797d8ae13e 100644 (file)
@@ -982,6 +982,7 @@ experimental_bits_srcdir = ${glibcxx_srcdir}/include/experimental/bits
 experimental_bits_builddir = ./experimental/bits
 experimental_bits_headers = \
        ${experimental_bits_srcdir}/erase_if.h \
+       ${experimental_bits_srcdir}/lfts_config.h \
        ${experimental_bits_srcdir}/shared_ptr.h \
        ${experimental_bits_srcdir}/string_view.tcc \
        ${experimental_bits_filesystem_headers}
index 7a4204e41c897ee26456d1df43f0a07993909f7e..b80e2705c29aa9d1066f27c80f6bfd37fc1f0f26 100644 (file)
@@ -6091,6 +6091,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { };
 #endif
 
+_GLIBCXX_END_NAMESPACE_VERSION
+
 #if __cplusplus > 201103L
 
 #define __cpp_lib_string_udls 201304
@@ -6099,6 +6101,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
   inline namespace string_literals
   {
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     _GLIBCXX_DEFAULT_ABI_TAG
     inline basic_string<char>
@@ -6124,12 +6127,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { 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
index 656ef78101256f196ae4a7d1dde275254ad609a2..6db66d7914cee66ada9556f02a595c56c7597795 100644 (file)
     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 { }
@@ -273,9 +276,16 @@ namespace std
   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 { } }
+  namespace __detail {
+    inline namespace __7 { }
+    namespace __variant { inline namespace __7 { } }
+  }
 }
 
 namespace __gnu_cxx
index 4e87bc0088b741efa187ba81aa016b6355172370..a7d45e6edc47a1604b7fac0a2e1d1fec8c5344a7 100644 (file)
@@ -769,10 +769,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
 
       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;
@@ -1860,10 +1863,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
 
       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)
index 06bc36e48862cb737dca5977000adec1afcf7f8c..2d668bcadb72b7c713fb8ea43bb75a3bb5623c70 100644 (file)
 
 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
@@ -47,8 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
        return ((__x - 1) & __x) == 0;
       };
+_GLIBCXX_END_NAMESPACE_VERSION
   }
 
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
   /**
    * @brief Uniform discrete distribution for random numbers.
    * A discrete random distribution on the range @f$[min, max]@f$ with equal
index 9083c7fa51ab8c0732cd6c563a910cf93f96a04a..0ba6311e952f6cd31fea9b07838d608afc9683f4 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <algorithm>
 #include <random>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index 96ad5762f66ec4cd54deccd2da4ade50af98caf0..5e091a45dda6ad77b4561b1b399b2082d6f0a032 100644 (file)
@@ -39,6 +39,7 @@
 #include <new>
 #include <utility>
 #include <type_traits>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index b9aa63765c7a5d4bc0c343ddb12461dcbfcf3197..0ed60aa4749faf8696a6ea1bab1872a510a7874f 100644 (file)
@@ -35,6 +35,7 @@
 #if __cplusplus <= 201103L
 # include <bits/c++14_warning.h>
 #else
+#include <experimental/bits/lfts_config.h>
 
 namespace std
 {
index b9cc041c236b174af1d76253fb3bfa5bb6c684bf..1c08b197ddad75adac381e63f5b70e7e2ac72abb 100644 (file)
@@ -46,10 +46,13 @@ namespace filesystem
 {
 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
 
   /**
diff --git a/libstdc++-v3/include/experimental/bits/lfts_config.h b/libstdc++-v3/include/experimental/bits/lfts_config.h
new file mode 100644 (file)
index 0000000..10e3687
--- /dev/null
@@ -0,0 +1,60 @@
+// 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
index 3a16c38ea1c7fb87005af52976b279b724fdd757..7c6b1be32d9ad1f362ab8a410d5b62d9694950b6 100644 (file)
@@ -44,6 +44,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
 {
 namespace experimental
 {
+inline namespace fundamentals_v1
+{
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template<typename _CharT, typename _Traits>
@@ -222,6 +224,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     }
 
 _GLIBCXX_END_NAMESPACE_VERSION
+} // namespace fundamentals_v1
 } // namespace experimental
 } // namespace std
 
index 30de1cf1e9ea34e5d2b7637a13f18315e6ac3f34..e703d9364ef8997f7e9d117ebabb58549e1cae75 100644 (file)
@@ -40,7 +40,7 @@
 #else
 
 #include <chrono>
-
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index eddbcf11c9c3afba5b7e86c0f97373759482f1ff..082e58ccd079f908f3e3b5222593d0fe0085e5eb 100644 (file)
@@ -45,6 +45,7 @@
 #ifdef _GLIBCXX_PARALLEL
 # include <parallel/algorithm> // For std::__parallel::search
 #endif
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index ea8afb89e02a1f3224ead0191123b72e6f5b4227..39187c5088193d1b1a20136ad8f2e7bcec269b20 100644 (file)
@@ -34,6 +34,7 @@
 #include <atomic>
 #include <cstddef>
 #include <bits/alloc_traits.h>
+#include <experimental/bits/lfts_config.h>
 
 namespace std {
 namespace experimental {
index ea8f6fb1c64324f45073dea9601078852d0d9b13..7191eca98ef6424d7f97d79f169d9d9722fdc5b6 100644 (file)
@@ -53,6 +53,7 @@
 #include <bits/functexcept.h>
 #include <bits/functional_hash.h>
 #include <bits/enable_special_members.h>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index 75cd8c0a4bd4ee54eed28a397154900b48d63b9a..15ffe4ac6ad85bd5252e9c9584454b27b04ef9fa 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <type_traits>
 #include <functional>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index 370390a9533aba7fa0dfcd68f2b988bd8c99d8ca..039e45fd6945a96fdda2c7ffe85637ab79335dee 100644 (file)
@@ -30,6 +30,7 @@
 #define _GLIBCXX_EXPERIMENTAL_RANDOM 1
 
 #include <random>
+#include <experimental/bits/lfts_config.h>
 
 namespace std {
 namespace experimental {
index 8ab45c1697ff91738bfaee9c79ef29432c4e680d..d55f6ae3388be2f1c1e32d15860cf21b0bc816d0 100644 (file)
@@ -40,7 +40,7 @@
 #else
 
 #include <ratio>
-
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -49,6 +49,7 @@ namespace experimental
 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;
index 7a89d440b2a17c270a626730376ec641318f41f0..8cb8c1ffa1c377677d373eb2f52c24a0e0fe36cf 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <string>
 #include <limits>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -651,13 +652,12 @@ _GLIBCXX_END_NAMESPACE_VERSION
 
 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)
@@ -679,10 +679,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { 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
 
index 8654951996097314ff5e1eb6b4941e816c09d0a9..5b286ee6b96769481fbbc508581fc1760d3c5b95 100644 (file)
@@ -40,7 +40,7 @@
 #else
 
 #include <system_error>
-
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -49,12 +49,14 @@ namespace experimental
 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
index b653ea72e2a853ffa7e73675b4e63edb3797f691..dc158e8834224c35fc106c6445e128fc92d7a7bc 100644 (file)
@@ -36,7 +36,9 @@
 #else
 
 #include <tuple>
+#include <functional>
 #include <bits/invoke.h>
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index a21fcd8bbada3ec1f72a855e77bf3fe06ca2d45a..06f1023a1393f702ae40d44d296ed5e467668697 100644 (file)
@@ -40,7 +40,7 @@
 #else
 
 #include <type_traits>
-
+#include <experimental/bits/lfts_config.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index 8948e93bc8f24af676d7dffbc041f07dafcd1e3f..77a161e314a58ee5147b7ab526051b5d7f2c06f1 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <utility>
 #include <bits/uses_allocator.h>
+#include <experimental/bits/lfts_config.h>
 
 namespace std {
 namespace experimental {
index 11e7fa298c4f618188c5c6f6dfc4d6ad96b2c5e1..cb8c87651833627cfa035ba5f3ea6cce69065d4f 100644 (file)
@@ -881,6 +881,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
   {
   inline namespace chrono_literals
   {
+  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     template<typename _Rep, unsigned long long _Val>
       struct _Checked_integral_constant
@@ -956,6 +957,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
       operator""ns()
       { return __check_overflow<chrono::nanoseconds, _Digits...>(); }
 
+  _GLIBCXX_END_NAMESPACE_VERSION
   } // inline namespace chrono_literals
   } // inline namespace literals
 
index bb09b7d0aa7de297a12b68bab884f8a10998d8b3..a682247b2a66a5127d555b8048097337be24adec 100644 (file)
@@ -1932,10 +1932,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     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
 
@@ -1963,12 +1966,12 @@ inline namespace complex_literals {
   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
index d78ed0284dd7e96cf5fdc4c7522f3d6243cc8591..14bfcd06e00ad2af4fca90bb4e44ef9b49a1de23 100644 (file)
@@ -427,10 +427,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       size_t       _M_len;
       const _CharT* _M_str;
     };
-
+_GLIBCXX_END_NAMESPACE_VERSION
 
   // [string.view.comparison], non-member basic_string_view comparison function
- _GLIBCXX_END_NAMESPACE_VERSION
   namespace __detail
   {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -445,8 +444,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     template<typename _Tp>
       using __idt = typename __identity<_Tp>::type;
- _GLIBCXX_END_NAMESPACE_VERSION
+_GLIBCXX_END_NAMESPACE_VERSION
   }
+
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template<typename _CharT, typename _Traits>
@@ -639,8 +639,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __is_fast_hash<hash<u32string_view>> : std::false_type
     { };
 #endif
-_GLIBCXX_END_NAMESPACE_VERSION
-
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std
index ac483f3e6ab8e24ec979021b89f97de8bcfaebc6..48baf9a33c481a5c7ca9a8be210f6957f5bba3dc 100644 (file)
@@ -85,10 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   constexpr size_t variant_npos = -1;
 
+_GLIBCXX_END_NAMESPACE_VERSION
+
 namespace __detail
 {
 namespace __variant
 {
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
   // Returns the first apparence of _Tp in _Types.
   // Returns sizeof...(_Types) if _Tp is not in _Types.
   template<typename _Tp, typename... _Types>
@@ -725,9 +728,12 @@ namespace __variant
       }
     };
 
+_GLIBCXX_END_NAMESPACE_VERSION
 } // namespace __variant
 } // namespace __detail
 
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
   template<typename _Tp, typename... _Types>
     inline constexpr bool holds_alternative(const variant<_Types...>& __v)
     noexcept
@@ -1250,7 +1256,11 @@ namespace __variant
       }
 
       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
diff --git a/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc b/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc
new file mode 100644 (file)
index 0000000..22196e3
--- /dev/null
@@ -0,0 +1,65 @@
+// { 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 }
index e3ef7f9a3997d7195518a2c2e86ee5d3a819eff4..4ade327abbab959c70ba15f0f335a9b24868d01b 100644 (file)
@@ -26,5 +26,5 @@ test01()
 
   // std::numeric_limits<int64_t>::max() == 9223372036854775807;
   auto h = 9223372036854775808h;
-  // { dg-error "cannot be represented" "" { target *-*-* } 889 }
+  // { dg-error "cannot be represented" "" { target *-*-* } 890 }
 }
index abd956281a8fce551ee1be9424e0fd2ecb0a647a..4310572493885467b63d75b951ed3f7f287d7dd8 100644 (file)
@@ -25,5 +25,5 @@ void test01()
   using std::experimental::any_cast;
 
   const any y(1);
-  any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 368 }
+  any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 369 }
 }
index ebc9ae011b58cfc8765b588b84700719ede4fc78..1b0366d756a2a1589fef638eb7223b2c80ba982f 100644 (file)
@@ -25,7 +25,7 @@
 using std::experimental::propagate_const;
 using std::unique_ptr;
 
-// { dg-error "no type" "" { target *-*-* } 158 }
+// { dg-error "no type" "" { target *-*-* } 159 }
 
 int main()
 {
index 4bba8cdc0e529675db921d28afeeea619fd4b8e9..ffdc756569128914478233f2ca245ce9831ef600 100644 (file)
 using std::experimental::propagate_const;
 using std::unique_ptr;
 
-// { dg-error "no type" "" { target *-*-* } 117 }
-// { dg-error "no type" "" { target *-*-* } 124 }
-// { dg-error "no type" "" { target *-*-* } 133 }
-// { dg-error "no type" "" { target *-*-* } 142 }
+// { dg-error "no type" "" { target *-*-* } 118 }
+// { dg-error "no type" "" { target *-*-* } 125 }
+// { dg-error "no type" "" { target *-*-* } 134 }
+// { dg-error "no type" "" { target *-*-* } 143 }
 
 int main()
 {
index 091a0e1c7803636785756a70a1df3b33b4b680b9..de2d293453de3b4cbfc9f6cff3cf93041f498f5d 100644 (file)
@@ -21,9 +21,9 @@
 
 using std::experimental::propagate_const;
 
-// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 }
-// { dg-error "not a pointer-to-object type" "" { target *-*-* } 65 }
-// { dg-error "forming pointer to reference type" "" { target *-*-* } 184 }
-// { dg-error "forming pointer to reference type" "" { target *-*-* } 210 }
+// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
+// { dg-error "not a pointer-to-object type" "" { target *-*-* } 66 }
+// { dg-error "forming pointer to reference type" "" { target *-*-* } 185 }
+// { dg-error "forming pointer to reference type" "" { target *-*-* } 211 }
 
 propagate_const<void*> test1;
index 156171b73eab07c4303c62ee54cab31da4a101c3..fd25204efb1e0325f51a34a191dc6ae3ad5a3202 100644 (file)
@@ -21,6 +21,6 @@
 
 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;
index 682355f4f629cca387effec164dc244f7526a9ec..3cea93d4f38b41a879c074a7431c1c3c5e1de86e 100644 (file)
@@ -21,8 +21,8 @@
 
 using std::experimental::propagate_const;
 
-// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 104 }
-// { dg-error "invalid type" "" { target *-*-* } 65 }
-// { dg-error "uninitialized reference member" "" { target *-*-* } 111 }
+// { dg-error "requires a class or a pointer to an object type" "" { target *-*-* } 105 }
+// { dg-error "invalid type" "" { target *-*-* } 66 }
+// { dg-error "uninitialized reference member" "" { target *-*-* } 112 }
 
 propagate_const<int&> test1; // { dg-error "use of deleted function" }
index 67e92b4e86e4358fdc75d612add0cf6852293e3c..9740fc31d8cb80fcb2fad4a4d0cd9cd08927c881 100644 (file)
@@ -21,6 +21,6 @@
 
 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;
index 874f3de1eb88e7cee37d8c716451250c33d0a2b7..20bc198d5f1b9ed76a280e4218f04900b8a930ba 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <vector>
 
-// { dg-error "multiple inlined namespaces" "" { target *-*-* } 332 }
+// { dg-error "multiple inlined namespaces" "" { target *-*-* } 342 }
 
 // "template argument 1 is invalid"
 // { dg-prune-output "tuple:993" }