This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/49565] character(kind=4) is emitted as DW_ATE_unsigned, not DW_ATE_unsigned_char
- From: "burnus at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 28 Jun 2011 16:45:40 +0000
- Subject: [Bug fortran/49565] character(kind=4) is emitted as DW_ATE_unsigned, not DW_ATE_unsigned_char
- Auto-submitted: auto-generated
- References: <bug-49565-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49565
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-06-28 16:45:35 UTC ---
There are two issues:
a) The one mentioned by Jakub for the committal cited in comment 1
That seems to be a DWARF bug - and Tromey has now filled an issue; it
should
show up in a while at http://www.dwarfstd.org/Issues.php
The problem is that DW_TAG_string_type does not support DW_AT_type,
which makes it not suitable for character(kind=4) [as it already has to
handle character(kind=1)].
b) Independent of that issue, GCC should emit DW_ATE_unsigned_char and not
DW_ATE_unsigned
The latter issue seems to come due to the following code in gen_array_type_die:
if (TYPE_STRING_FLAG (type)
/* Case handling kind=1 characters. */
{
...
return;
}
...
/* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
if (is_fortran ()
&& TREE_CODE (type) == ARRAY_TYPE
&& TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
&& !TYPE_STRING_FLAG (TREE_TYPE (type)))
add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
This test is true as:
(gdb) p type->type_common.string_flag
$6 = 1
(gdb) p type->typed.type->type_common.string_flag
$7 = 0
I wonder whether the
&& !TYPE_STRING_FLAG (TREE_TYPE (type)))
shouldn't be instead a
&& !TYPE_STRING_FLAG (type))
Or alternatively, whether fortran/trans-type.c's
gfc_get_character_type_len_for_eltype should not only set
TYPE_STRING_FLAG (type) = 1;
but also
TYPE_STRING_FLAG (TREE_TYPE (type)) = 1;