Hi, r254484 explicitly added previously ignored address space qualifiers, when emitting DWARF dies for types.
Adding address spaces to cv_qual_mask, however, breaks nearest_type_subqualifier, which uses the number of bits set (i.e popcount_hwi) to find the type variant that has the largest strict subset of a given type's qualifiers. Address spaces are simply represented as 16 bits, and therefore the number of set bits there has no relevance when finding nearest_type_subqualifier. This also causes gcc.target/avr/pr52472.c to ICE. This patch fixes that by excluding address space quals from cv_qual_mask. Bootstrap and reg test for x86_64-linux in progress. Ok to commit to trunk if the tests pass? Regards Senthil gcc/ChangeLog: 2019-08-06 Senthil Kumar Selvaraj <senthilkumar.selva...@microchip.com> * dwarf2out.c (modified_type_die): CLEAR_QUAL_ADDR_SPACE from cv_qual_mask before calling get_nearest_type_subqualifiers. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index aa7fd7eb465..157c970d729 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -13295,8 +13295,9 @@ modified_type_die (tree type, int cv_quals, bool reverse, /* Determine a lesser qualified type that most closely matches this one. Then generate DW_TAG_* entries for the remaining qualifiers. */ + int nearest_qual_mask = CLEAR_QUAL_ADDR_SPACE (cv_qual_mask); sub_quals = get_nearest_type_subqualifiers (type, cv_quals, - cv_qual_mask); + nearest_qual_mask); if (sub_quals && use_debug_types) { bool needed = false;