After the patch of 2016-11-03, gen_type_die_with_usage picks a variant to use for the DIE for a FUNCTION_TYPE or METHOD_TYPE, as does modified_type_die. The two need to pick the same variant, otherwise modified_type_die will not find the DIE that was written earlier. Unfortunately the loops were written such that gen_type_die_with_usage used the last matching variant and modified_type_die used the first matching variant. This caused PR 79289. This patch changes gen_type_die_with_usage to use the first matching variant. Bootstrapped and tested on x86_64-pc-linux-gnu. Committed to mainline.
Ian 2017-01-30 Ian Lance Taylor <i...@google.com> PR debug/79289 * dwarf2out.c (gen_type_die_with_usage): When picking a variant for FUNCTION_TYPE/METHOD_TYPE, use the first matching one.
Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 245036) +++ gcc/dwarf2out.c (working copy) @@ -24453,8 +24453,13 @@ but try to canonicalize. */ tree main = TYPE_MAIN_VARIANT (type); for (tree t = main; t; t = TYPE_NEXT_VARIANT (t)) - if (check_base_type (t, main) && check_lang_type (t, type)) - type = t; + { + if (check_base_type (t, main) && check_lang_type (t, type)) + { + type = t; + break; + } + } } else if (TREE_CODE (type) != VECTOR_TYPE && TREE_CODE (type) != ARRAY_TYPE)