Patchwork [PUSHED,08/11] gdb/fortran: Add builtin 8-byte integer type with (kind=8) support

login
register
mail settings
Submitter Andrew Burgess
Date March 6, 2019, 6:15 p.m.
Message ID <36471cc72cd087daf4eff62b4ab26213917fac2c.1551895529.git.andrew.burgess@embecosm.com>
Download mbox | patch
Permalink /patch/31747/
State New
Headers show

Comments

Andrew Burgess - March 6, 2019, 6:15 p.m.
Add a new builtin type, an 8-byte integer, and allow GDB to parse
'integer (kind=8)', returning the new 8-byte integer.

gdb/ChangeLog:

	* f-exp.y (convert_to_kind_type): Handle integer (kind=8).
	* f-lang.c (build_fortran_types): Setup builtin_integer_s8.
	* f-lang.h (struct builtin_f_type): Add builtin_integer_s8 field.

gdb/testsuite/ChangeLog:

	* gdb.fortran/type-kinds.exp: Test new integer type kind.
---
 gdb/ChangeLog                            | 6 ++++++
 gdb/f-exp.y                              | 2 ++
 gdb/f-lang.c                             | 4 ++++
 gdb/f-lang.h                             | 1 +
 gdb/testsuite/ChangeLog                  | 4 ++++
 gdb/testsuite/gdb.fortran/type-kinds.exp | 1 +
 6 files changed, 18 insertions(+)

Patch

diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 980ee4b4adb..d256ff14c1e 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -865,6 +865,8 @@  convert_to_kind_type (struct type *basetype, int kind)
 	return parse_f_type (pstate)->builtin_integer_s2;
       else if (kind == 4)
 	return parse_f_type (pstate)->builtin_integer;
+      else if (kind == 8)
+	return parse_f_type (pstate)->builtin_integer_s8;
     }
 
   error (_("unsupported kind %d for type %s"),
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 34ebfd9de6b..f27eb0d45da 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -375,6 +375,10 @@  build_fortran_types (struct gdbarch *gdbarch)
     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0,
 			 "integer*2");
 
+  builtin_f_type->builtin_integer_s8
+    = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
+			 "integer*8");
+
   builtin_f_type->builtin_logical_s2
     = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1,
 			 "logical*2");
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
index 5afafb1a051..746c11fd9f1 100644
--- a/gdb/f-lang.h
+++ b/gdb/f-lang.h
@@ -66,6 +66,7 @@  struct builtin_f_type
   struct type *builtin_character;
   struct type *builtin_integer;
   struct type *builtin_integer_s2;
+  struct type *builtin_integer_s8;
   struct type *builtin_logical;
   struct type *builtin_logical_s1;
   struct type *builtin_logical_s2;
diff --git a/gdb/testsuite/gdb.fortran/type-kinds.exp b/gdb/testsuite/gdb.fortran/type-kinds.exp
index c679bc504f9..198ac58baf4 100644
--- a/gdb/testsuite/gdb.fortran/type-kinds.exp
+++ b/gdb/testsuite/gdb.fortran/type-kinds.exp
@@ -54,6 +54,7 @@  proc test_basic_parsing_of_type_kinds {} {
 
     test_cast_1_to_type_kind "integer" "2" "1" "2"
     test_cast_1_to_type_kind "integer" "4" "1" "4"
+    test_cast_1_to_type_kind "integer" "8" "1" "8"
 }
 
 proc test_parsing_invalid_type_kinds {} {