From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7905) id 90658383F20F; Tue, 13 Dec 2022 13:16:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 90658383F20F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670937410; bh=+udDF4205ZxWWlUBtNnKLPwkQ8QGUAJfhLZMZ1uQ9+4=; h=From:To:Subject:Date:From; b=YKOZLo9Xp8xTBe7Kx39dpTpInxC8g1VgyoxrK2NMXF3UvmVS8GgO1alX00gm8FwoD k4JnT2mymJUwhbN0GkfE+qarKG/us7apg9H5MV/h9R8d/JJsDKkKghfc/TqaiG6cXm Z+HVNLv0EsFMBK7NecMujbRbpHoiepSMgLqTwvZg= MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" From: Arthur Cohen To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-4631] Use DW_ATE_UTF for the Rust 'char' type X-Act-Checkin: gcc X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: b4fddbe9592e9feb37ce567d90af822b75995531 X-Git-Newrev: dd950cbbb97ff5ebc203cba6c2112edd322b6f35 Message-Id: <20221213131650.90658383F20F@sourceware.org> Date: Tue, 13 Dec 2022 13:16:50 +0000 (GMT) List-Id: https://gcc.gnu.org/g:dd950cbbb97ff5ebc203cba6c2112edd322b6f35 commit r13-4631-gdd950cbbb97ff5ebc203cba6c2112edd322b6f35 Author: Tom Tromey Date: Tue Aug 23 15:47:13 2022 +0100 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 Co-authored-by: Marc Poulhiès Diff: --- gcc/dwarf2out.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index e81044b8c48..ed06707a7b4 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. */