This is the mail archive of the
mailing list for the GCC project.
Re: [patch] Fix miscompilation of gnat1 in LTO bootstrap
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 15 Oct 2014 16:13:09 +0200
- Subject: Re: [patch] Fix miscompilation of gnat1 in LTO bootstrap
- Authentication-results: sourceware.org; auth=none
- References: <1553466 dot Fmh6GVef6h at polaris> <1860810 dot 1P47kgm7eF at polaris> <CAFiYyc3PnF1o0xhV6y+s4sB-Gyw7z244oi0K5f+0+RZMpxq_ug at mail dot gmail dot com> <2013156 dot Wkd4eNJMIK at polaris>
On Fri, Oct 10, 2014 at 10:38 AM, Eric Botcazou <firstname.lastname@example.org> wrote:
>> I can't see how this can work with LTO. We need a middle-end way
>> to represent the alias relation of those types. At least I can't see how
>> your simple patch covers all cases here?
> It covers what I think is the most prominent case (unconstrained array types),
> the other cases are far less annoying in practice.
>> With LTO we preserve TYPE_ALIAS_SET == 0, so another way to
>> fix this (and which I'd like more) is to do your patch in the Ada frontend,
>> that is, use alias-set zero for all types you relate if flag_lto.
> Really Big Hammer if you ask me.
>> Another way is to make LTO canonical type merging handle the
>> case of type_contains_placeholder_p "better", that is by treating
>> two types with those equivalent more easily. For arrays this simply
>> means hashing and comparing non-constant TYPE_DOMAIN the
>> same / as equal. There is already some code handling PLACEHODER_EXPR
>> special, but it doesn't seem to be enough (why in this case)?
> Yes, gimple_canonical_types_compatible_p will return true for a couple of
> unconstrained (i.e. type_contains_placeholder_p) array types with the same
> component type. The problem here is for an unconstrained array type and a
> constrained (regular) array type with the same component type. Can I modify
> gimple_canonical_types_compatible_p to return true in that case as well?
Yes, that works for me.
> Eric Botcazou