compatibility of structs/unions/enums in the middle end

Uecker, Martin Martin.Uecker@med.uni-goettingen.de
Wed Oct 2 18:24:00 GMT 2019


Am Mittwoch, den 02.10.2019, 17:37 +0200 schrieb Richard Biener:
> On October 2, 2019 3:55:43 PM GMT+02:00, "Uecker, Martin" <Martin.Uecker@med.uni-goettingen.de>
> wrote:
> > Am Mittwoch, den 02.10.2019, 15:12 +0200 schrieb Richard Biener:
> > > On Wed, Oct 2, 2019 at 3:10 PM Richard Biener
> > > <richard.guenther@gmail.com> wrote:
> > > > 
...

> > > Oh, and LTO does _not_ merge types declared inside a function,
> > > so
> > > 
> > > void foo () { struct S { int i; }; }
> > > void bar () { struct S { int i; }; }
> > > 
> > > the two S are distinct and objects of that type do not conflict.
> > 
> > This is surprising as these types are compatible across TUs. So
> > if some pointer is passed between these functions this is
> > supposed to work.
> 
> So if they are compatible the frontend needs to mark them so in this case. 

It can't. The front end never sees the other TU.

Best,
Martin


More information about the Gcc mailing list