On 4/12/19 3:19 AM, Jakub Jelinek wrote:
In r234626 Marek has added code to remove TREE_TYPE (newdecl) from its variant list for typedefs, because we'll ggc_free the TYPE_NAME of that type. Unfortunately, that code will ICE if TREE_TYPE (newdecl) is its own TYPE_MAIN_VARIANT. This can happen if due to attributes the newdecl's type has been build_distinct_type_copy created but hasn't been type_hash_canon merged (which we do for a few attributes like aligned, but certainly don't do it for most other attributes). In the likely case there are no variants for that type yet, there is just nothing to remove. If there are some (in theory), the options are do what the following patch does, keep the type in the variant list as the main variant, just change the TYPE_NAME, so that it doesn't refer to ggc_freed TYPE_DECL, or try to pick up some other type as the main variant and adjust the whole variant list (I don't think the C/C++ FEs unlike Ada FE like e.g. qualified types as main variant though).
If the typedef is a duplicate, the type ought to be garbage as well, no? Jason