gdbsupport: add assertions in array_view
Add assertions to ensure we don't access an array_view out of bounds. Enable these assertions only when _GLIBCXX_DEBUG is set, as we did for gdb::optional. Change-Id: Iffaee38252405073735ed123c8e57fde6b2c6be3
This commit is contained in:
parent
61d7f128e6
commit
d9f82e9313
1 changed files with 24 additions and 4 deletions
|
@ -162,9 +162,19 @@ public:
|
||||||
constexpr const T *end () const noexcept { return m_array + m_size; }
|
constexpr const T *end () const noexcept { return m_array + m_size; }
|
||||||
|
|
||||||
/*constexpr14*/ reference operator[] (size_t index) noexcept
|
/*constexpr14*/ reference operator[] (size_t index) noexcept
|
||||||
{ return m_array[index]; }
|
{
|
||||||
|
#if defined(_GLIBCXX_DEBUG)
|
||||||
|
gdb_assert (index < m_size);
|
||||||
|
#endif
|
||||||
|
return m_array[index];
|
||||||
|
}
|
||||||
constexpr const_reference operator[] (size_t index) const noexcept
|
constexpr const_reference operator[] (size_t index) const noexcept
|
||||||
{ return m_array[index]; }
|
{
|
||||||
|
#if defined(_GLIBCXX_DEBUG)
|
||||||
|
gdb_assert (index < m_size);
|
||||||
|
#endif
|
||||||
|
return m_array[index];
|
||||||
|
}
|
||||||
|
|
||||||
constexpr size_type size () const noexcept { return m_size; }
|
constexpr size_type size () const noexcept { return m_size; }
|
||||||
constexpr bool empty () const noexcept { return m_size == 0; }
|
constexpr bool empty () const noexcept { return m_size == 0; }
|
||||||
|
@ -173,12 +183,22 @@ public:
|
||||||
|
|
||||||
/* Return a new array view over SIZE elements starting at START. */
|
/* Return a new array view over SIZE elements starting at START. */
|
||||||
constexpr array_view<T> slice (size_type start, size_type size) const noexcept
|
constexpr array_view<T> slice (size_type start, size_type size) const noexcept
|
||||||
{ return {m_array + start, size}; }
|
{
|
||||||
|
#if defined(_GLIBCXX_DEBUG)
|
||||||
|
gdb_assert (start + size <= m_size);
|
||||||
|
#endif
|
||||||
|
return {m_array + start, size};
|
||||||
|
}
|
||||||
|
|
||||||
/* Return a new array view over all the elements after START,
|
/* Return a new array view over all the elements after START,
|
||||||
inclusive. */
|
inclusive. */
|
||||||
constexpr array_view<T> slice (size_type start) const noexcept
|
constexpr array_view<T> slice (size_type start) const noexcept
|
||||||
{ return {m_array + start, size () - start}; }
|
{
|
||||||
|
#if defined(_GLIBCXX_DEBUG)
|
||||||
|
gdb_assert (start <= m_size);
|
||||||
|
#endif
|
||||||
|
return {m_array + start, size () - start};
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T *m_array;
|
T *m_array;
|
||||||
|
|
Loading…
Add table
Reference in a new issue