---
 coregrind/m_debuginfo/priv_d3basics.h |    2 ++
 coregrind/m_debuginfo/readdwarf3.c    |    1 +
 2 files changed, 3 insertions(+)

--- valgrind-upstream.orig/coregrind/m_debuginfo/priv_d3basics.h
+++ valgrind-upstream/coregrind/m_debuginfo/priv_d3basics.h
@@ -372,6 +372,8 @@ typedef enum
     DW_ATE_signed_fixed = 0xd,
     DW_ATE_unsigned_fixed = 0xe,
     DW_ATE_decimal_float = 0xf,
+    /* DWARF 4.  */
+    DW_ATE_UTF = 0x10,
     /* HP extensions.  */
     DW_ATE_HP_float80            = 0x80, /* Floating-point (80 bit).  */
     DW_ATE_HP_complex_float80    = 0x81, /* Complex floating-point (80 bit).  */
--- valgrind-upstream.orig/coregrind/m_debuginfo/readdwarf3.c
+++ valgrind-upstream/coregrind/m_debuginfo/readdwarf3.c
@@ -2149,6 +2149,7 @@ static void parse_type_DIE ( /*MOD*/XArr
          if (attr == DW_AT_encoding && ctsSzB > 0) {
             switch (cts) {
                case DW_ATE_unsigned: case DW_ATE_unsigned_char:
+               case DW_ATE_UTF: /* since DWARF4, e.g. char16_t from C++ */
                case DW_ATE_boolean:/* FIXME - is this correct? */
                   typeE.Te.TyBase.enc = 'U'; break;
                case DW_ATE_signed: case DW_ATE_signed_char:
