diff options
author | Tom Tromey <tom@tromey.com> | 2022-08-23 15:47:13 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-12-13 14:00:02 +0100 |
commit | dd950cbbb97ff5ebc203cba6c2112edd322b6f35 (patch) | |
tree | 16b962ee025f53bd101f93300a74bf298d4feb62 /gcc | |
parent | b4fddbe9592e9feb37ce567d90af822b75995531 (diff) | |
download | gcc-dd950cbbb97ff5ebc203cba6c2112edd322b6f35.zip gcc-dd950cbbb97ff5ebc203cba6c2112edd322b6f35.tar.gz gcc-dd950cbbb97ff5ebc203cba6c2112edd322b6f35.tar.bz2 |
Use DW_ATE_UTF for the Rust 'char' type
The Rust 'char' type should use the DWARF DW_ATE_UTF encoding.
gcc/
* dwarf2out.cc (is_rust): New.
(base_type_die): Use DW_ATE_UTF for the Rust 'char' type.
(gen_compile_unit_die): Handle "GNU Rust".
Co-authored-by: Mark Wielaard <mark@klomp.org>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/dwarf2out.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index e81044b..ed06707 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -5600,6 +5600,17 @@ is_fortran (const_tree decl) return is_fortran (); } +/* Return TRUE if the language is Rust. + Note, returns FALSE for dwarf_version < 5 && dwarf_strict. */ + +static inline bool +is_rust () +{ + unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language); + + return lang == DW_LANG_Rust; +} + /* Return TRUE if the language is Ada. */ static inline bool @@ -13232,7 +13243,11 @@ base_type_die (tree type, bool reverse) } if (TYPE_STRING_FLAG (type)) { - if (TYPE_UNSIGNED (type)) + if ((dwarf_version >= 4 || !dwarf_strict) + && is_rust () + && int_size_in_bytes (type) == 4) + encoding = DW_ATE_UTF; + else if (TYPE_UNSIGNED (type)) encoding = DW_ATE_unsigned_char; else encoding = DW_ATE_signed_char; @@ -25231,6 +25246,8 @@ gen_compile_unit_die (const char *filename) { if (strcmp (language_string, "GNU Go") == 0) language = DW_LANG_Go; + else if (strcmp (language_string, "GNU Rust") == 0) + language = DW_LANG_Rust; } } /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */ |