[gdb/testsuite] Fix fail in gdb.fortran/ptype-on-functions.exp with gcc-7
authorTom de Vries <tdevries@suse.de>
Mon, 5 Jul 2021 14:26:42 +0000 (16:26 +0200)
committerTom de Vries <tdevries@suse.de>
Mon, 5 Jul 2021 14:26:42 +0000 (16:26 +0200)
Since commit 05b85772061 "gdb/fortran: Add type info of formal parameter for
clang" I see:
...
(gdb) ptype say_string^M
type = void (character*(*), integer(kind=4))^M
(gdb) FAIL: gdb.fortran/ptype-on-functions.exp: ptype say_string
...

The part of the commit causing the fail is:
...
 gdb_test "ptype say_string" \
-    "type = void \\(character\\*\\(\\*\\), integer\\(kind=\\d+\\)\\)"
+    "type = void \\(character\[^,\]+, $integer8\\)"
...
which fails to take into account that for gcc-7 and before, the type for
string length of a string argument is int, not size_t.

Fix this by allowing both $integer8 and $integer4.

Tested on x86_64-linux, with gcc-7 and gcc-10.

gdb/testsuite/ChangeLog:

2021-07-05  Tom de Vries  <tdevries@suse.de>

* gdb.fortran/ptype-on-functions.exp: Allow both $integer8 and
$integer4 for size of string length.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.fortran/ptype-on-functions.exp

index 9a227215dd3a2c767f9301afa46a345162abda26..a6171ade8a94159a450716910375d58dc321cf10 100644 (file)
@@ -1,3 +1,8 @@
+2021-07-05  Tom de Vries  <tdevries@suse.de>
+
+       * gdb.fortran/ptype-on-functions.exp: Allow both $integer8 and
+       $integer4 for size of string length.
+
 2021-07-03  Joel Brobecker  <brobecker@adacore.com>
 
        * gdb.base/default.exp: Change $_gdb_major to 12.
index 75197952b6f6e52ed1eef5a391f5178ed86ae3ad..7d119679e65d146df5b6a2638dff80f4a390e4dd 100644 (file)
@@ -33,6 +33,13 @@ set integer4 [fortran_int4]
 set logical4 [fortran_logical4]
 set integer8 [fortran_int8]
 
+# A fortran string parameter is passed as a char *, and an additional
+# argument str_ for the string length.  The type used for the string length
+# argument is size_t, but for gcc 7 and earlier, the actual type is int
+# instead ( see
+# https://gcc.gnu.org/onlinedocs/gfortran/Argument-passing-conventions.html ).
+set stringlen ($integer8|$integer4)
+
 if {[test_compiler_info {clang-*}]} {
     set some_module_class_type "Type number"
     set some_module_aux_info ", $integer8 \\(10\\)"
@@ -62,7 +69,7 @@ gdb_test "ptype fun_ptr" \
     "type = PTR TO -> \\( $integer4 \\(\\) \\(${fun_ptr_arg}\\) \\)"
 
 gdb_test "ptype say_string" \
-    "type = void \\(character\[^,\]+, $integer8\\)"
+    "type = void \\(character\[^,\]+, $stringlen\\)"
 
 set say_array_artificial_first_arg ""
 if {[test_compiler_info {clang-*}]} {