Hi, This patch adds constructors of array_slice that are required to create them from non-const (heap or auto) vectors or from GC vectors.
The use of non-const array_slices is somewhat limited, as creating one from const vec<some_type> still leads to array_slice<const some_type>, so I eventually also only resorted to having read-only array_slices. But I do need the constructor from the gc vector. Bootstrapped and tested along code that actually uses it on x86_64-linux. OK for trunk? Thanks, Martin gcc/ChangeLog: 2022-08-08 Martin Jambor <mjam...@suse.cz> * vec.h (array_slice): Add constructors for non-const reference to heap vector and pointers to heap vectors. --- gcc/vec.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gcc/vec.h b/gcc/vec.h index eed075addc9..b0477e1044c 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -2264,6 +2264,18 @@ public: array_slice (const vec<OtherT> &v) : m_base (v.address ()), m_size (v.length ()) {} + template<typename OtherT> + array_slice (vec<OtherT> &v) + : m_base (v.address ()), m_size (v.length ()) {} + + template<typename OtherT> + array_slice (const vec<OtherT, va_gc> *v) + : m_base (v ? v->address () : nullptr), m_size (v ? v->length () : 0) {} + + template<typename OtherT> + array_slice (vec<OtherT, va_gc> *v) + : m_base (v ? v->address () : nullptr), m_size (v ? v->length () : 0) {} + iterator begin () { return m_base; } iterator end () { return m_base + m_size; } -- 2.37.2