diff mbox

Fix std::shared_ptr FAILs with -fno-rtti

Message ID 20141213004502.GS3134@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Dec. 13, 2014, 12:45 a.m. UTC
On 12/12/14 21:06 +0000, Jonathan Wakely wrote:
>A couple of small fixes for shared_ptr tests that fail with -fno-rtti.
>
>Tested x86_64-linux, committed to trunk.

Huh, somehow I committed that when the new test wasn't even passing.

This fixes it properly. Tested again and committed to trunk.
diff mbox

Patch

commit b9fd3adf17cf8b03df10288f053615d7411d5fb5
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Sat Dec 13 00:44:17 2014 +0000

    	PR libstdc++/58594
    	* include/bits/shared_ptr_base.h: Real fix for cv-qualified types.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218698 138bc75d-0d04-0410-961f-82ee72b054a4

diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
index 3ef783f..ad68c23 100644
--- a/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -1106,7 +1106,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       template<typename _Alloc>
         struct _Deleter
         {
-          void operator()(_Tp* __ptr)
+          void operator()(typename _Alloc::value_type* __ptr)
           {
 	    __allocated_ptr<_Alloc> __guard{ _M_alloc, __ptr };
 	    allocator_traits<_Alloc>::destroy(_M_alloc, __guard.get());
@@ -1123,14 +1123,15 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	    rebind_traits<typename std::remove_cv<_Tp>::type> __traits;
 	  _Deleter<typename __traits::allocator_type> __del = { __a };
 	  auto __guard = std::__allocate_guarded(__del._M_alloc);
-	  _M_ptr = __guard.get();
+	  auto __ptr = __guard.get();
 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
 	  // 2070. allocate_shared should use allocator_traits<A>::construct
-	  __traits::construct(__del._M_alloc, _M_ptr,
+	  __traits::construct(__del._M_alloc, __ptr,
 			      std::forward<_Args>(__args)...);
 	  __guard = nullptr;
-	  __shared_count<_Lp> __count(_M_ptr, __del, __del._M_alloc);
+	  __shared_count<_Lp> __count(__ptr, __del, __del._M_alloc);
 	  _M_refcount._M_swap(__count);
+	  _M_ptr = __ptr;
 	  __enable_shared_from_this_helper(_M_refcount, _M_ptr, _M_ptr);
 	}
 #endif