On Wed, Oct 2, 2019 at 8:24 PM Uecker, Martin <martin.uec...@med.uni-goettingen.de> wrote: > > 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.uec...@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.guent...@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.
If the type "leaves" the CU via a call the called function has a prototype through which it "sees" the CU. Richard. > Best, > Martin