https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62077

--- Comment #33 from Richard Biener <rguenth at gcc dot gnu.org> ---
Another difference - graphite-interchange.o - is due to streaming the indexed
decl for fprintf differently.  stage2 streams

[1968] = tree_list <0x7ffff6703ac8>
[1969] = identifier_node <0x7ffff66ddf20>
[1970] = identifier_node <0x7ffff6706210>
[1971] = tree_list <0x7ffff6703af0>
[1972] = tree_list <0x7ffff6703c30>
[1973] = tree_list <0x7ffff6707488>
[1974] = tree_list <0x7ffff67861b8>
[1975] = tree_list <0x7ffff67861e0>
[1976] = tree_list <0x7ffff4dddaf0>
[1977] = tree_list <0x7ffff4dddac8>
[1978] = function_type <0x7ffff4de05e8>
[1979] = identifier_node <0x7ffff6781840>
[1980] = function_decl <0x7ffff6784d00>

while stage3

[1968] = tree_list <0x7ffff6703ac8>
[1969] = identifier_node <0x7ffff66ddf20>
[1970] = identifier_node <0x7ffff6706210>
[1971] = tree_list <0x7ffff6703af0>
[1972] = tree_list <0x7ffff6703c30>
[1973] = tree_list <0x7ffff6707488>
[1974] = tree_list <0x7ffff67861b8>
[1975] = tree_list <0x7ffff67861e0>
[1976] = function_type <0x7ffff4de05e8>
[1977] = identifier_node <0x7ffff6781840>
[1978] = function_decl <0x7ffff6784d00>

the tree_list differences come from stage2 streaming TYPE_ARG_TYPEs while
stage3 producing a reference to previously written ones (streamed for
__gmp_fprintf).  Note that stage3 re-uses (aka shares) TYPE_ARG_TYPEs
for fprintf and __gmp_fprintf while stage2 does not (the FUNCTION_TYPE
itself is not shared).

I don't even see where we would share TYPE_ARG_TYPEs but not the FUNCTION_TYPE
itself...  maybe it happens when parsing first builds a function type
without attributes and then later appends attributes to them?

Reply via email to