> > > > Half of FAILs are gone, but the rest is correctly merged (alignment > > matches). Thus I would omit ICF > > in this testcase. I'm going to install the patch.
Richard, I wonder what happens with TYPE_ALIGN at LTO. It is not part of canonical type definition and thus we get random alignments on CANONICAL_TYPE_HASH. func_checker::types_compatible leads to type_compatible_p which will eventually do /* If we know the canonical types, compare them. */ if (TYPE_CANONICAL (inner_type) && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type)) return true; and thus we will hapilly merge types with different TYPE_ALIGN. Should func_checker::types_compatible be extended to compare these? Clearly TYPE_ALIGN matters for vectorizer and other plaes... Any chance -malign-double can work and mix with -mno-align-double? I think we will mix the alignments because double is one of nodes we do not stream, right? Honza