> > > 
> > > I am not sure if TYPE_MAIN_VARIANT is really needed here.  What I know is 
> > > that
> > > complete types may have incomplete variants.
> > 
> > How can that be?  TYPE_FIELDS is shared across variants and all variants
> > should be layed out.
> 
> Because TYPE_FILEDS are not always shared across variants.  For example
> gfc_nonrestricted_type builds variants of types that have their own 
> TYPE_FIELDS
> lists whose types are variants of the original TYPE_FIELDs.  C++ FE used to do
> the same for member pointers, but I noticed that last stage1 with early 
> version
> of type verifier and as far as I can remember Jason changed that.

And also I am positive that we do have incomplete variants of complete types in
IL. Those seem to happen for C++ templates.  I can dig more into reason for
these appearing.

We also also get wrong self-referring builtin types. This we discussed in
https://gcc.gnu.org/ml/gcc-patches/2014-07/msg00562.html gcov_info_type still
fails the type verifier because we produce variant that has TYPE_SIZE but no
TYPE_FIELDS.  It does not happen on mainline only becuase we moved verify_type
into dwarf2out and that type never gets into debug info.  I don't see how to
fix this other way than by my original patch in the thread above - upon
completing builtin type we should copy its fields from main variant at the same
time we copy size.  FEs are doing that.

Honza
> 
> Honza

Reply via email to