mirror of git://gcc.gnu.org/git/gcc.git
shared_ptr_base.h (_Sp_counted_base<_S_single>): Use non-atomic operations.
* include/bits/shared_ptr_base.h (_Sp_counted_base<_S_single>): Use non-atomic operations. * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line number. * testsuite/20_util/shared_ptr/cons/void_neg.cc: Likewise. From-SVN: r204949
This commit is contained in:
parent
6d3f673cf6
commit
ad098ad133
|
|
@ -1,3 +1,10 @@
|
||||||
|
2013-11-18 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||||
|
|
||||||
|
* include/bits/shared_ptr_base.h (_Sp_counted_base<_S_single>): Use
|
||||||
|
non-atomic operations.
|
||||||
|
* testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line number.
|
||||||
|
* testsuite/20_util/shared_ptr/cons/void_neg.cc: Likewise.
|
||||||
|
|
||||||
2013-11-16 Edward Smith-Rowland <3dw4rd@verizon.net>
|
2013-11-16 Edward Smith-Rowland <3dw4rd@verizon.net>
|
||||||
|
|
||||||
Implement N3762 string_view: a non-owning reference to a string.
|
Implement N3762 string_view: a non-owning reference to a string.
|
||||||
|
|
|
||||||
|
|
@ -209,11 +209,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
_Sp_counted_base<_S_single>::
|
_Sp_counted_base<_S_single>::
|
||||||
_M_add_ref_lock()
|
_M_add_ref_lock()
|
||||||
{
|
{
|
||||||
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
|
if (_M_use_count == 0)
|
||||||
{
|
__throw_bad_weak_ptr();
|
||||||
_M_use_count = 0;
|
++_M_use_count;
|
||||||
__throw_bad_weak_ptr();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
@ -248,6 +246,41 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
__ATOMIC_RELAXED));
|
__ATOMIC_RELAXED));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void
|
||||||
|
_Sp_counted_base<_S_single>::_M_add_ref_copy()
|
||||||
|
{ ++_M_use_count; }
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void
|
||||||
|
_Sp_counted_base<_S_single>::_M_release() noexcept
|
||||||
|
{
|
||||||
|
if (--_M_use_count == 0)
|
||||||
|
{
|
||||||
|
_M_dispose();
|
||||||
|
if (--_M_weak_count == 0)
|
||||||
|
_M_destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void
|
||||||
|
_Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
|
||||||
|
{ ++_M_weak_count; }
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void
|
||||||
|
_Sp_counted_base<_S_single>::_M_weak_release() noexcept
|
||||||
|
{
|
||||||
|
if (--_M_weak_count == 0)
|
||||||
|
_M_destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline long
|
||||||
|
_Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
|
||||||
|
{ return _M_use_count; }
|
||||||
|
|
||||||
|
|
||||||
// Forward declarations.
|
// Forward declarations.
|
||||||
template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
|
template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ void test01()
|
||||||
{
|
{
|
||||||
X* px = 0;
|
X* px = 0;
|
||||||
std::shared_ptr<X> p1(px); // { dg-error "here" }
|
std::shared_ptr<X> p1(px); // { dg-error "here" }
|
||||||
// { dg-error "incomplete" "" { target *-*-* } 779 }
|
// { dg-error "incomplete" "" { target *-*-* } 812 }
|
||||||
|
|
||||||
std::shared_ptr<X> p9(ap()); // { dg-error "here" }
|
std::shared_ptr<X> p9(ap()); // { dg-error "here" }
|
||||||
// { dg-error "incomplete" "" { target *-*-* } 307 }
|
// { dg-error "incomplete" "" { target *-*-* } 307 }
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,5 @@
|
||||||
void test01()
|
void test01()
|
||||||
{
|
{
|
||||||
std::shared_ptr<void> p((void*)nullptr); // { dg-error "here" }
|
std::shared_ptr<void> p((void*)nullptr); // { dg-error "here" }
|
||||||
// { dg-error "incomplete" "" { target *-*-* } 778 }
|
// { dg-error "incomplete" "" { target *-*-* } 811 }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue