re PR libstdc++/65352 (array<T,0>::begin()/end() etc. forms a null reference and breaks on clang+ubsan)

PR libstdc++/65352
	* include/profile/array (array::data): Use _S_ptr.
	* include/debug/array (array::data): Likewise.

From-SVN: r223838
This commit is contained in:
Jonathan Wakely 2015-05-28 17:00:09 +01:00 committed by Jonathan Wakely
parent 396e67d21a
commit ac3efa775f
3 changed files with 8 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2015-05-28 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/65352
* include/profile/array (array::data): Use _S_ptr.
* include/debug/array (array::data): Likewise.
PR libstdc++/65352
* include/std/array (__array_traits::_S_ptr): New function.
(array::data): Use _S_ptr to avoid creating invalid reference.

View File

@ -216,11 +216,11 @@ namespace __debug
pointer
data() noexcept
{ return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
{ return _AT_Type::_S_ptr(_M_elems); }
const_pointer
data() const noexcept
{ return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
{ return _AT_Type::_S_ptr(_M_elems); }
};
// Array comparisons.

View File

@ -178,11 +178,11 @@ namespace __profile
pointer
data() noexcept
{ return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
{ return _AT_Type::_S_ptr(_M_elems); }
const_pointer
data() const noexcept
{ return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
{ return _AT_Type::_S_ptr(_M_elems); }
};
// Array comparisons.