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.
commit b69bee71a9eaa91f3a6fae875d702c9d39b02354
Author: Jonathan Wakely <jwak...@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;
}
};