c_value_print_struct (val, stream, recurse, options);
break;
+ case TYPE_CODE_CHAR:
case TYPE_CODE_INT:
c_value_print_int (val, stream, options);
break;
case TYPE_CODE_ERROR:
case TYPE_CODE_UNDEF:
case TYPE_CODE_COMPLEX:
- case TYPE_CODE_CHAR:
default:
generic_value_print (val, stream, recurse, options, &c_decorations);
break;
break;
case DW_ATE_UTF:
{
- if (bits == 16)
- type = builtin_type (arch)->builtin_char16;
- else if (bits == 32)
- type = builtin_type (arch)->builtin_char32;
- else
- {
- complaint (_("unsupported DW_ATE_UTF bit size: '%d'"),
- bits);
- type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
- }
+ type = init_character_type (objfile, bits, 1, name);
return set_die_type (die, type, cu);
}
break;
break;
}
- if (name && strcmp (name, "char") == 0)
+ if (type->code () == TYPE_CODE_INT
+ && name != nullptr
+ && strcmp (name, "char") == 0)
type->set_has_no_signedness (true);
maybe_set_alignment (cu, die, type);
--- /dev/null
+# Copyright 2021 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test DW_ATE_UTF for Rust.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use
+# gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile main.c .S
+
+# Make some DWARF for the test.
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+ upvar cu_lang cu_lang
+
+ declare_labels char_label
+
+ # Creating a CU with 4-byte addresses lets this test link on
+ # both 32- and 64-bit machines.
+ cu { addr_size 4 } {
+ compile_unit {
+ {name file1.txt}
+ {language @DW_LANG_Rust}
+ } {
+ char_label: DW_TAG_base_type {
+ {DW_AT_byte_size 4 DW_FORM_sdata}
+ {DW_AT_encoding @DW_ATE_UTF}
+ {DW_AT_name char}
+ }
+
+ DW_TAG_variable {
+ {name cvalue}
+ {type :$char_label}
+ {const_value 97 DW_FORM_udata}
+ }
+ }
+ }
+}
+
+if {[prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] debug]} {
+ return -1
+}
+
+if {![runto main]} {
+ return -1
+}
+
+gdb_test "set language rust" \
+ "Warning: the current language does not match this frame."
+# Get the values into history so we can use it from Rust.
+gdb_test "print cvalue" "\\\$1 = 97 'a'"