Hello,

dwarf2out.c reads:

[...]
    case CHAR_TYPE:
      /* GNU Pascal/Ada CHAR type.  Not used in C.  */
      if (TREE_UNSIGNED (type))
        encoding = DW_ATE_unsigned_char;
      else
        encoding = DW_ATE_signed_char;
      break;
[...]

The comment is wrong. In Ada, the tree code for a character type is
INTEGER_TYPE. That means that a wrong value is generated for the tag
DW_AT_encoding.

Two solutions : we can either change the tree code to CHAR_TYPE or add a test
to detect Ada character types in the INTEGER_TYPE case, like it is done for
C:

[...]
    case INTEGER_TYPE:
      /* Carefully distinguish the C character types, without messing
         up if the language is not C. Note that we check only for the names
         that contain spaces; other names might occur by coincidence in other
         languages.  */
      if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
             && (type == char_type_node   
                 || ! strcmp (type_name, "signed char")
                 || ! strcmp (type_name, "unsigned char"))))
        {
          if (TREE_UNSIGNED (type))
            encoding = DW_ATE_unsigned;
          else
            encoding = DW_ATE_signed;
          break;
        }
[...]

The first solution would probably be cleaner, but it would mean that
Ada would be the only supported langage to use CHAR_TYPE. The second
one would be safer.

Opinions/thoughts?

Thanks in advance,
Jerome

Reply via email to