diff mbox

Partial solution to LWG 523

Message ID 20161206143413.GL6326@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Dec. 6, 2016, 2:34 p.m. UTC
On 30/11/16 14:45 +0000, Jonathan Wakely wrote:
>On 30/11/16 13:03 +0000, Jonathan Wakely wrote:
>>On 26/11/16 16:27 -0800, Tim Shen wrote:
>>>diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
>>>index 953aa87..2fb70b7 100644
>>>--- a/libstdc++-v3/include/bits/shared_ptr_base.h
>>>+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
>>>@@ -1000,7 +1000,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>>     element_type&
>>>     operator*() const noexcept
>>>     {
>>>-	__glibcxx_assert(_M_ptr != nullptr);
>>>+	__glibcxx_assert(_M_get() != nullptr);
>>>	return *_M_get();
>>>     }
>>
>>Oops, thanks, but let's fix this separately (I'll do it now) so the
>>rest of the patch only touches regex stuff.
>
>I've fixed that with this patch, committed to trunk.
>

There's a similar problem in the __shared_ptr_access specialization
for shared_ptr<cv void>, fixed by this patch.
diff mbox

Patch

commit b69bee71a9eaa91f3a6fae875d702c9d39b02354
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Dec 6 14:13:54 2016 +0000

    Fix debug mode assertion for std::shared_ptr<void>
    
    	* include/bits/shared_ptr_base.h
    	(__shared_ptr_access<T, L, false, true>::operator->()): Fix assertion.

diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
index 2fb70b7..7e02043 100644
--- a/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -983,8 +983,9 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       element_type*
       operator->() const noexcept
       {
-	_GLIBCXX_DEBUG_PEDASSERT(_M_get() != nullptr);
-	return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
+	auto __ptr = static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
+	_GLIBCXX_DEBUG_PEDASSERT(__ptr != nullptr);
+	return __ptr;
       }
     };