[PUSHED 09/11] gdb/fortran: Use TYPE_CODE_CHAR for character types

Andrew Burgess
2019-03-06T18:16:00Z

Switch to using TYPE_CODE_CHAR for character types. This appears to
have little impact on the test results as gFortran uses the
DW_TAG_string_type to represent all character variables (as far as I
can see). The only place this has an impact is when the user casts a
variable to a character type, in which case GDB does now use the CHAR
type, and prints the variable as both a value and a character, for
example, before:

(gdb) p ((character) 97)
$1 = 97

and after:

(gdb) p ((character) 97)
$1 = 97 'a'

gdb/ChangeLog:

* f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character
types.

gdb/testsuite/ChangeLog:

* gdb.fortran/type-kinds.exp: Update expected results.
---
gdb/ChangeLog | 5 +++++
gdb/f-lang.c | 2 +-
gdb/testsuite/ChangeLog | 4 ++++
gdb/testsuite/gdb.fortran/type-kinds.exp | 2 +-
4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index f27eb0d45da..c329d602e24 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -366,7 +366,7 @@ build_fortran_types (struct gdbarch *gdbarch)
= arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "VOID");

builtin_f_type->builtin_character
- = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
+ = arch_type (gdbarch, TYPE_CODE_CHAR, TARGET_CHAR_BIT, "character");

builtin_f_type->builtin_logical_s1
= arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
diff --git a/gdb/testsuite/gdb.fortran/type-kinds.exp b/gdb/testsuite/gdb.fortran/type-kinds.exp
index 198ac58baf4..b5d4e7b5816 100644
--- a/gdb/testsuite/gdb.fortran/type-kinds.exp
+++ b/gdb/testsuite/gdb.fortran/type-kinds.exp
@@ -38,7 +38,7 @@ proc test_cast_1_to_type_kind {base_type type_kind cast_result size_result} {

# Test parsing of `(kind=N)` type modifiers.
proc test_basic_parsing_of_type_kinds {} {
- test_cast_1_to_type_kind "character" "1" "1" "1"
+ test_cast_1_to_type_kind "character" "1" "1 '\\\\001'" "1"

test_cast_1_to_type_kind "complex" "4" "\\(1,0\\)" "8"
test_cast_1_to_type_kind "complex" "8" "\\(1,0\\)" "16"
--
2.14.5