diff options
Diffstat (limited to 'gdb/testsuite/gdb.fortran/oop_extend_type.exp')
-rwxr-xr-x | gdb/testsuite/gdb.fortran/oop_extend_type.exp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.fortran/oop_extend_type.exp b/gdb/testsuite/gdb.fortran/oop_extend_type.exp new file mode 100755 index 00000000000..eefc66c9514 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/oop_extend_type.exp @@ -0,0 +1,159 @@ +# 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/>. + +standard_testfile ".f90" +load_lib "fortran.exp" + +if { [skip_fortran_tests] } { + return -1 +} + +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ + {debug f90 quiet}] } { + return -1 +} + +if ![fortran_runto_main] { + perror "could not run to main" + return -1 +} + +# Depending on the compiler being used, the type names can be printed differently. +set real [fortran_real4] +set logical [fortran_logical4] + +set line1 [gdb_get_line_number "! Before vla allocation"] +gdb_breakpoint $line1 +gdb_continue_to_breakpoint "line1" ".*$srcfile:$line1.*" + +gdb_test "whatis wp_vla" "type = Type waypoint, allocatable \\(:\\)" \ + "whatis wp_vla before allocation" + +set line2 [gdb_get_line_number "! After value assignment"] +gdb_breakpoint $line2 +gdb_continue_to_breakpoint "line2" ".*$srcfile:$line2.*" + +# test print of wp +set test "p wp%coo" +gdb_test_multiple "$test" "$test" { + -re " = \\(1, 2, 1\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} +gdb_test "p wp%point%coo" " = \\(1, 2, 1\\)" +gdb_test "p wp%point" " = \\( coo = \\(1, 2, 1\\) \\)" +gdb_test "p wp" " = \\( point = \\( coo = \\(1, 2, 1\\) \\), angle = 100 \\)" + +gdb_test "whatis wp" "type = Type waypoint" +gdb_test "ptype wp" \ + [multi_line "type = Type waypoint" \ + " Type point :: point" \ + " $real :: angle" \ + "End Type waypoint"] + +set test "ptype wp%coo" +gdb_test_multiple "$test" "$test" { + -re "$real \\(3\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} +gdb_test "ptype wp%point%coo" "$real \\(3\\)" + +# test print of fwp +set test "p fwp%coo" +gdb_test_multiple "$test" "$test" { + -re " = \\(1, 2, 2\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} +gdb_test "p fwp%waypoint%point%coo" " = \\(1, 2, 2\\)" +gdb_test "p fwp%waypoint%point" " = \\( coo = \\(1, 2, 2\\) \\)" +gdb_test "p fwp%waypoint" \ + " = \\( point = \\( coo = \\(1, 2, 2\\) \\), angle = 10 \\)" +gdb_test "p fwp" \ + " = \\( waypoint = \\( point = \\( coo = \\(1, 2, 2\\) \\), angle = 10 \\), is_fancy = \.TRUE\. \\)" + +set test "p fwp%angle" +gdb_test_multiple "$test" "$test" { + -re " = 10\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named angle.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} + +gdb_test "whatis fwp" "type = Type fancywaypoint" +gdb_test "ptype fwp" \ + [multi_line "type = Type fancywaypoint" \ + " Type waypoint :: waypoint" \ + " $logical :: is_fancy" \ + "End Type fancywaypoint"] + +set test "ptype fwp%coo" +gdb_test_multiple "$test" "$test" { + -re "$real \\(3\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} +gdb_test "ptype fwp%waypoint%point%coo" "$real \\(3\\)" + +# test print of wp_vla +set test "p wp_vla(1)%coo" +gdb_test_multiple "$test" "$test" { + -re " = \\(10, 12, 10\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} + +gdb_test "p wp_vla(1)%point%coo" " = \\(10, 12, 10\\)" +gdb_test "p wp_vla(1)%point" " = \\( coo = \\(10, 12, 10\\) \\)" +gdb_test "p wp_vla(1)" " = \\( point = \\( coo = \\(10, 12, 10\\) \\), angle = 101 \\)" + +gdb_test "whatis wp_vla" "type = Type waypoint, allocatable \\(3\\)" \ + "whatis wp_vla after allocation" + +gdb_test "ptype wp_vla" \ + [multi_line "type = Type waypoint" \ + " Type point :: point" \ + " $real :: angle" \ + "End Type waypoint, allocatable \\(3\\)"] + +set test "ptype wp_vla(1)%coo" +gdb_test_multiple "$test" "$test" { + -re "$real \\(3\\)\r\n$gdb_prompt $" { + pass "$test" + } + -re "There is no member named coo.\r\n$gdb_prompt $" { + kfail "gcc/49475" "$test" + } +} + +gdb_test "ptype wp_vla(1)%point%coo" "$real \\(3\\)" |