Use ODR for canonical types construction in LTO
Jason Merrill
jason@redhat.com
Mon Jun 24 17:42:00 GMT 2019
On Mon, Jun 24, 2019 at 1:23 PM Richard Biener <rguenther@suse.de> wrote:
> On Mon, 24 Jun 2019, Jason Merrill wrote:
>
> > On Mon, Jun 24, 2019 at 12:40 PM Jason Merrill <jason@redhat.com> wrote:
> > > On Mon, Jun 24, 2019 at 11:57 AM Jan Hubicka <hubicka@ucw.cz> wrote:
> > > >
> > > > > > > As
> > > > > > >
> > > > > > > class a var;
> > > > > > > class b:a {} *bptr;
> > > > > > >
> > > > > > > var.foo;
> > > > > > >
> > > > > > > Expanding this as var.as_base_a.foo would make access path oracle to
> > > > > > > disambiguate it from bptr->as_base_b->as_base_a.foo which is wrong with
> > > > > > > gimple memory moel where we allow placement new replacing var by
> > > > > > > instance of b.
> > > > >
> > > > > Why do we allow that? I would expect that to only be allowed if a is
> > > > > something like aligned_storage, i.e. a thin wrapper around a char/byte
> > > > > buffer.
> > > >
> > > > I think because Richard defined gimple memory model this way after fair
> > > > amount of frustration from placement news, stack slot sharing issues
> > > > and non-conforming codebases :)
> > > >
> > > > I think for normal user variables this is overly conservative.
> > > > At the moment TBAA is bit of a mess. Once it is cleaned up, we could
> > > > see if restricting this more pays back and then we would need to
> > > > find way to pass the info to middle-end (as it does not
> > > > know difference between aligned_storage and other stuff).
> > >
> > > I thought I remembered someone's recent-ish work to treat specially
> > > types containing a char array, but I'm not finding it now.
> >
> > Specifically, aligned_storage has a first member which is a char
> > array, and a char array can alias anything, so we can put anything in
> > a char array, and a class can alias its first member, so transitively
> > we can put anything in such a class.
>
> You refer to TYPE_TYPELESS_STORAGE I guess.
Yes, thanks.
Jason
More information about the Gcc-patches
mailing list