Relax Debug Mode assertions on operator-> for smart pointers.

* include/bits/shared_ptr_base.h (__shared_ptr::operator->): Change
	_GLIBCXX_DEBUG_ASSERT to _GLIBCXX_DEBUG_PEDASSERT.
	* include/bits/unique_ptr.h (unique_ptr::operator->): Likewise.
	* testsuite/20_util/shared_ptr/observers/get.cc: Test operator-> on
	empty shared_ptr.

From-SVN: r227524
This commit is contained in:
Jonathan Wakely 2015-09-07 18:17:23 +01:00 committed by Jonathan Wakely
parent b11e7db713
commit 93023f35f7
4 changed files with 21 additions and 2 deletions

View File

@ -1,5 +1,11 @@
2015-09-07 Jonathan Wakely <jwakely@redhat.com>
* include/bits/shared_ptr_base.h (__shared_ptr::operator->): Change
_GLIBCXX_DEBUG_ASSERT to _GLIBCXX_DEBUG_PEDASSERT.
* include/bits/unique_ptr.h (unique_ptr::operator->): Likewise.
* testsuite/20_util/shared_ptr/observers/get.cc: Test operator-> on
empty shared_ptr.
* include/bits/regex_compiler.h (_BracketMatcher::_M_is_ready):
Initialize using NSDMI and set using _GLIBCXX_DEBUG_ONLY.

View File

@ -1054,7 +1054,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp*
operator->() const noexcept
{
_GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
_GLIBCXX_DEBUG_PEDASSERT(_M_ptr != 0);
return _M_ptr;
}

View File

@ -295,7 +295,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
pointer
operator->() const noexcept
{
_GLIBCXX_DEBUG_ASSERT(get() != pointer());
_GLIBCXX_DEBUG_PEDASSERT(get() != pointer());
return get();
}

View File

@ -63,11 +63,24 @@ test03()
VERIFY( &p->i == &a->i );
}
void
test04()
{
bool test __attribute__((unused)) = true;
#if !(defined _GLIBCXX_DEBUG && defined _GLIBCXX_DEBUG_PEDANTIC)
std::shared_ptr<int> p;
auto np = p.operator->();
VERIFY( np == nullptr );
#endif
}
int
main()
{
test01();
test02();
test03();
test04();
return 0;
}