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?