diff options
-rw-r--r-- | gdb/testsuite/gdb.fortran/string-types.exp | 70 | ||||
-rw-r--r-- | gdb/testsuite/gdb.fortran/string-types.f90 | 37 |
2 files changed, 107 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.fortran/string-types.exp b/gdb/testsuite/gdb.fortran/string-types.exp new file mode 100644 index 0000000..7031c07 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/string-types.exp @@ -0,0 +1,70 @@ +# Copyright 2022 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 print the value, and type, of Fortran string variables declared in +# different ways in the test program. + +standard_testfile .f90 +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug f90 quiet}]} { + return -1 +} + +if { ![fortran_runto_main] } { + perror "Couldn't run to main" + return +} + +gdb_breakpoint [gdb_get_line_number "First breakpoint"] +gdb_breakpoint [gdb_get_line_number "Second breakpoint"] +gdb_breakpoint [gdb_get_line_number "Third breakpoint"] + +with_test_prefix "first breakpoint" { + # Continue to the first breakpoint. + gdb_continue_to_breakpoint "continue" + gdb_test "print s" " = 'foo'" + gdb_test "ptype s" "type = character\\*3" +} + +with_test_prefix "second breakpoint" { + # Continue to the second breakpoint. + gdb_continue_to_breakpoint "continue" + gdb_test "print s" " = 'foo'" + gdb_test "ptype s" "type = character\\*3" +} + +with_test_prefix "third breakpoint, first time" { + # Continue to the third breakpoint. + gdb_continue_to_breakpoint "continue" + gdb_test "print s" " = 'foo'" + gdb_test "ptype s" "type = character \\(3\\)" +} + +with_test_prefix "third breakpoint, second time" { + # Continue to the third breakpoint again. The string we print + # this time includes some embedded special characters (newline, + # tab, carriage-return, and an embedded null byte). Currently GDB + # prints these as C style backslash sequences, which isn't valid + # Fortran code, but is more compact than the Fortran way of doing + # it (see the test source for details), and is likely understood + # by most users, so seems good enough. + gdb_continue_to_breakpoint "continue" + gdb_test "print s" " = 'foo\\\\n\\\\t\\\\r\\\\000bar'" + gdb_test "ptype s" "type = character \\(10\\)" +} diff --git a/gdb/testsuite/gdb.fortran/string-types.f90 b/gdb/testsuite/gdb.fortran/string-types.f90 new file mode 100644 index 0000000..2317d23 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/string-types.f90 @@ -0,0 +1,37 @@ +! Copyright 2022 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/>. + +subroutine fixed_size_string_v1(s) + character*3 s + print *, "" ! First breakpoint. +end subroutine fixed_size_string_v1 + +subroutine fixed_size_string_v2(s) + character(3) s + print *, "" ! Second breakpoint. +end subroutine fixed_size_string_v2 + +subroutine variable_size_string(s) + character*(*) s + print *, "" ! Third breakpoint. +end subroutine variable_size_string + +program test + call fixed_size_string_v1('foo') + call fixed_size_string_v2('foo') + call variable_size_string('foo') + call variable_size_string('foo' // achar(10) // achar(9) // achar(13) // & + achar(0) // 'bar') +end program test |