> - Ada builds !TYPE_ARTIFICIAL variant of TYPE_ARTIFICIAL type. > Eric, I can not really make sense of this. Is this expected? > If we have artificial type, how it can become not?
Yes, that's a bit unexpected and probably comes from the case where we build a variant and it's not really appropriate to do so (gnat_pushdecl): /* ??? Copy and original type are not supposed to be variant but we really need a variant for the placeholder machinery to work. */ if (TYPE_IS_FAT_POINTER_P (t)) tt = build_variant_type_copy (t); else { /* TYPE_NEXT_PTR_TO is a chain of main variants. */ tt = build_distinct_type_copy (TYPE_MAIN_VARIANT (t)); if (TREE_CODE (t) == POINTER_TYPE) TYPE_NEXT_PTR_TO (TYPE_MAIN_VARIANT (t)) = tt; tt = build_qualified_type (tt, TYPE_QUALS (t)); } On the other hand, if the type declared in the source code is volatile, one could imagine that the non-volatile main variant be TYPE_ARTIFICIAL and the declared type be !TYPE_ARTIFICIAL. > - During Ada builds there are types that differ in TYPE_SIZES_GIMPLIFIED. > This is probably harmless but I am not sure it ishappen to happen. That it's harmless I'm sure, otherwise it would already have bitten us. :-) But I agree that it would be better to always gimplify the main variant first and propagate to the other variants, as done in gimplify_type_sizes. If you have a patchlet for this one, you can open a PR and attach it. -- Eric Botcazou