> Am 26.08.2022 um 18:39 schrieb Martin Jambor <mjam...@suse.cz>:
> 
> 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) {}
> +

I don’t quite understand why the generic ctor doesn’t cover the GC case.  It 
looks more like reference vs pointer?

>   iterator begin () { return m_base; }
>   iterator end () { return m_base + m_size; }
> 
> -- 
> 2.37.2
> 

Reply via email to