gdb/fortran: change default logical type to builtin_logical
authorNils-Christian Kempke <nils-christian.kempke@intel.com>
Mon, 11 Apr 2022 12:06:55 +0000 (14:06 +0200)
committerNils-Christian Kempke <nils-christian.kempke@intel.com>
Mon, 11 Apr 2022 12:06:55 +0000 (14:06 +0200)
According to the Fortran standard, logical is of the size of a
'single numeric storage unit' (just like real and integer). For
gfortran, flang and ifx/ifort this storage unit (or the default
logical type) is of size kind 4, actually occupying 4 bytes of
storage, and so the default type for logical expressions in
Fortran should probably also be Logical*4 and not Logical*2.  I
adapted GDB's behavior to be in line with
gfortran/ifort/ifx/flang.

gdb/f-lang.c
gdb/testsuite/gdb.fortran/types.exp

index 80846244dfb5130b0bfdba4d16c6f0f47973300a..fb28cb7a5618bff6d5f48f5874510575462fc8f7 100644 (file)
@@ -1570,7 +1570,7 @@ f_language::language_arch_info (struct gdbarch *gdbarch,
   add (builtin->builtin_void);
 
   lai->set_string_char_type (builtin->builtin_character);
-  lai->set_bool_type (builtin->builtin_logical_s2, "logical");
+  lai->set_bool_type (builtin->builtin_logical, "logical");
 }
 
 /* See language.h.  */
index 4205d308be77f6f720c870c47ce183921b770dda..8122cbcca38b0d11cb8af0b4c45192e49ce94f3b 100644 (file)
@@ -48,10 +48,10 @@ proc test_logical_literal_types_accepted {} {
     # Test the only possible values for a logical, TRUE and FALSE (and
     # also true and false).
 
-    gdb_test "pt .TRUE." "type = logical\\*2"
-    gdb_test "pt .FALSE." "type = logical\\*2"
-    gdb_test "pt .true." "type = logical\\*2"
-    gdb_test "pt .false." "type = logical\\*2"
+    gdb_test "pt .TRUE." "type = logical\\*4"
+    gdb_test "pt .FALSE." "type = logical\\*4"
+    gdb_test "pt .true." "type = logical\\*4"
+    gdb_test "pt .false." "type = logical\\*4"
 }
 
 proc test_float_literal_types_accepted {} {