This fixes the versioned namespace build by moving some macros and
adding std::experimental in c++config.

Bootstrap works again now, but regex tests all fail with versioned
namespaces due to a lookup problem with friend functions and inline
namespaces (PR 59256).

2013-11-22  Jonathan Wakely  <jwakely....@gmail.com>

        PR libstdc++/59247
        * include/bits/c++config (_GLIBCXX_INLINE_VERSION): Declare namespace
        std::experimental::__7 as inline.
        * include/bits/regex.h (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Do not
        enclose namespace __detail.
        * include/bits/regex.tcc (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise.
        * include/std/iomanip (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise.
        * include/ext/pb_ds/tag_and_trait.hpp (detail): Fix comment.
        * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number.


Tested x86_64-linux, with and without
--enable-symvers=gnu-versioned-namespace, committed to trunk.
commit c318b726a14b791119b4775b631d20b665e778d7
Author: Jonathan Wakely <jwakely....@gmail.com>
Date:   Fri Nov 22 14:07:59 2013 +0000

        PR libstdc++/59247
        * include/bits/c++config (_GLIBCXX_INLINE_VERSION): Declare namespace
        std::experimental::__7 as inline.
        * include/bits/regex.h (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Do not
        enclose namespace __detail.
        * include/bits/regex.tcc (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise.
        * include/std/iomanip (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise.
        * include/ext/pb_ds/tag_and_trait.hpp (detail): Fix comment.
        * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number.

diff --git a/libstdc++-v3/include/bits/c++config 
b/libstdc++-v3/include/bits/c++config
index aca8484..b00bc41 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -169,6 +169,8 @@
     namespace placeholders { }
     namespace regex_constants { }
     namespace this_thread { }
+
+    namespace experimental { }
   }
 
   namespace abi { }
@@ -222,6 +224,8 @@ namespace std
   namespace regex_constants { inline namespace __7 { } }
   namespace this_thread { inline namespace __7 { } }
 
+  namespace experimental { inline namespace __7 { } }
+
   namespace __detail { inline namespace __7 { } }
 }
 
diff --git a/libstdc++-v3/include/bits/regex.h 
b/libstdc++-v3/include/bits/regex.h
index 84b8cf1..9f8a0eb 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -30,8 +30,6 @@
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
 namespace __detail
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -53,6 +51,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 _GLIBCXX_END_NAMESPACE_VERSION
 }
 
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
   /**
    * @addtogroup regex
    * @{
diff --git a/libstdc++-v3/include/bits/regex.tcc 
b/libstdc++-v3/include/bits/regex.tcc
index 2ac095d..f58b32d 100644
--- a/libstdc++-v3/include/bits/regex.tcc
+++ b/libstdc++-v3/include/bits/regex.tcc
@@ -37,8 +37,6 @@
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
 namespace __detail
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -137,6 +135,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 _GLIBCXX_END_NAMESPACE_VERSION
 }
 
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
   template<typename _Ch_type>
   template<typename _Fwd_iter>
     typename regex_traits<_Ch_type>::string_type
diff --git a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp 
b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
index 90bda95..3d16e52 100644
--- a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
@@ -447,7 +447,7 @@ namespace __gnu_pbds
     template<typename Key, typename Mapped, typename _Alloc, typename Tag,
             typename Policy_Tl = null_type>
       struct container_base_dispatch;
-  } // namespace __detail
+  } // namespace detail
   //@}
 } // namespace __gnu_pbds
 
diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip
index 47284e8..e135d08 100644
--- a/libstdc++-v3/include/std/iomanip
+++ b/libstdc++-v3/include/std/iomanip
@@ -336,7 +336,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #if __cplusplus > 201103L
 
+_GLIBCXX_END_NAMESPACE_VERSION
   namespace __detail {
+  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     /**
      * @brief Struct for delimited strings.
@@ -447,8 +449,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
        return __is;
       }
-
+  _GLIBCXX_END_NAMESPACE_VERSION
   } // namespace __detail
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   /**
    * @brief Manipulator for quoted strings.
diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc 
b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
index 23c551b..a691e8d 100644
--- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
+++ b/libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc
@@ -25,4 +25,4 @@
 
 #include <vector>
 
-// { dg-error "multiple inlined namespaces" "" { target *-*-* } 275 }
+// { dg-error "multiple inlined namespaces" "" { target *-*-* } 279 }

Reply via email to