This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Emit DW_ATE_UTF for char16_t/char32_t
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Jason Merrill <jason at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 17 Jun 2010 09:58:12 +0200
- Subject: [PATCH] Emit DW_ATE_UTF for char16_t/char32_t
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
The final DWARF4 version now has DW_ATE_UTF value, so this patch
makes sure it is used for char16_t and char32_t (only in C++ so far,
in C we don't have such a builtin type).
The name based discovery is perhaps ugly, but we don't have enough bits to
waste to add TYPE_UTF_FLAG (like TYPE_STRING_FLAG) and adding a langhook
for that is IMHO overkill. But if you wish to go that way, it is possible
too.
2010-06-17 Jakub Jelinek <jakub@redhat.com>
* dwarf2.h (enum dwarf_type): Add DW_ATE_UTF.
* dwarf2out.c (base_type_die): Use DW_ATE_UTF for
C++ char16_t and char32_t.
--- include/dwarf2.h.jj 2010-06-09 13:42:16.000000000 +0200
+++ include/dwarf2.h 2010-06-17 08:33:07.000000000 +0200
@@ -654,6 +654,8 @@ enum dwarf_type
DW_ATE_signed_fixed = 0xd,
DW_ATE_unsigned_fixed = 0xe,
DW_ATE_decimal_float = 0xf,
+ /* DWARF 4. */
+ DW_ATE_UTF = 0x10,
DW_ATE_lo_user = 0x80,
DW_ATE_hi_user = 0xff,
--- gcc/dwarf2out.c.jj 2010-06-17 08:17:11.000000000 +0200
+++ gcc/dwarf2out.c 2010-06-17 09:17:12.000000000 +0200
@@ -12377,6 +12377,21 @@ base_type_die (tree type)
switch (TREE_CODE (type))
{
case INTEGER_TYPE:
+ if ((dwarf_version >= 4 || !dwarf_strict)
+ && is_cxx ()
+ && TYPE_NAME (type)
+ && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+ && DECL_SOURCE_LOCATION (TYPE_NAME (type)) == BUILTINS_LOCATION
+ && DECL_NAME (TYPE_NAME (type)))
+ {
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+ if (strcmp (name, "char16_t") == 0
+ || strcmp (name, "char32_t") == 0)
+ {
+ encoding = DW_ATE_UTF;
+ break;
+ }
+ }
if (TYPE_STRING_FLAG (type))
{
if (TYPE_UNSIGNED (type))
Jakub