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;


Reply via email to