diff mbox

[v3] fix libstdc++/59247

Message ID CAH6eHdR6kEpnRHNKyMFP4EnGG-uayBV__GVQGogmzY-C_jKdRA@mail.gmail.com
State New
Headers show

Commit Message

Jonathan Wakely Nov. 22, 2013, 4:58 p.m. UTC
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.gcc@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.gcc@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 mbox

Patch

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 }