On Fri, 24 Feb 2023, Jakub Jelinek wrote: > On Fri, Feb 24, 2023 at 02:47:39PM +0100, Richard Biener wrote: > > * vec.h (vec<T, A, vl_embed>::m_vecdata): Remove. > > (vec<T, A, vl_embed>::m_vecpfx): Align as T to avoid > > changing alignment of vec<T, A, vl_embed> and simplifying > > address. > > (vec<T, A, vl_embed>::address): Compute as this + 1. > > (vec<T, A, vl_embed>::embedded_size): Use sizeof the > > vector instead of the offset of the m_vecdata member. > > (auto_vec<T, N>::m_data): Turn storage into > > uninitialized unsigned char. > > (auto_vec<T, N>::auto_vec): Allow allocation of one > > stack member. Initialize m_vec in a special way to > > avoid later stringop overflow diagnostics. > > * vec.cc (test_auto_alias): New. > > (vec_cc_tests): Call it. > > @@ -1559,8 +1560,14 @@ class auto_vec : public vec<T, va_heap> > > public: > > auto_vec () > > { > > - m_auto.embedded_init (MAX (N, 2), 0, 1); > > - this->m_vec = &m_auto; > > + m_auto.embedded_init (N, 0, 1); > > + /* ??? Instead of initializing m_vec from &m_auto directly use an > > + expression that avoids refering to a specific member of 'this' > > + to derail the -Wstringop-overflow diagnostic code, avoiding > > + the impression that data accesses are supposed to be to the > > + m_auto memmber storage. */ > > s/memmber/member/ > > > + size_t off = (char *) &m_auto - (char *) this; > > + this->m_vec = (vec<T, va_heap, vl_embed> *) ((char *) this + off); > > } > > > > auto_vec (size_t s CXX_MEM_STAT_INFO) > > @@ -1571,7 +1578,7 @@ public: > > return; > > } > > > > - m_auto.embedded_init (MAX (N, 2), 0, 1); > > + m_auto.embedded_init (N, 0, 1); > > this->m_vec = &m_auto; > > Don't we need the above 2 lines here as well (perhaps with a shorter comment > just referencing the earlier comment)?
I've noticed that as well and put it there now, it wasn't necessary to get bootstrap working. > Otherwise LGTM, thanks. Thanks, Richard.