On Mon, 20 Mar 2023, Jakub Jelinek wrote:

> On Tue, Mar 14, 2023 at 07:29:19AM +0000, Richard Biener via Gcc-patches 
> wrote:
> > This is a reduced testcase for an issue I ran into when trying to
> > improve PTA compile-time further, there wasn't any C family runfail
> > in the testsuite for this.
> > 
> > Pushed.
> > 
> >     * g++.dg/torture/20230313.C: New testcase.
> 
> I've noticed this testcase FAILs on i686-linux with
> -fstack-protector-strong.
> 
> sizeof (auto_vec<int, 8>) == 16, which in this case contains
> 4-byte m_vec (which points to to m_auto), then 8-byte m_auto
> which contains just 8-byte m_vecpfx and finally 1 byte m_data,
> rest is padding.  We then try to push 2 ints to it, so 8 bytes,
> starting at the end of m_vecpfx aka address of m_data, but there
> is just 1 byte + 3 bytes of padding.
> In the lp64 case, I think sizeof (auto_vec<int, 8>) == 24,
> because there is 8-byte m_vec, 8-byte m_vecpfx and 1-byte m_char
> all with 8-byte alignment.
> 
> Can we just change
> --- gcc/testsuite/g++.dg/torture/20230313.C.jj        2023-03-14 
> 12:24:55.930723588 +0100
> +++ gcc/testsuite/g++.dg/torture/20230313.C   2023-03-20 11:11:55.009044518 
> +0100
> @@ -60,7 +60,7 @@ struct auto_vec : vec<T, va_heap>
>      this->release ();
>    }
>    vec<T, va_heap, int> m_auto;
> -  char m_data;
> +  char m_data[2 * sizeof (int)];
>  };
>  template<typename T>
>  struct vec<T, va_heap>
> 
> or does it go against what the testcase wants to verify?

That should be fine.

Thanks,
Richard.

Reply via email to