# 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 . 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" set output_pass_wp [multi_line "type = Type, extends\\(point\\) :: waypoint" \ " Type point :: point" \ " $real :: angle" \ "End Type waypoint(, allocatable)?"] set output_kfail_wp [multi_line "type = Type waypoint" \ " Type point :: point" \ " $real :: angle" \ "End Type waypoint(, allocatable)?"] set test "ptype wp" gdb_test_multiple "$test" "$test" { -re "$output_pass_wp\r\n$gdb_prompt $" { pass "$test" } -re "$output_kfail_wp\r\n$gdb_prompt $" { kfail "gcc/49475" "$test" } } 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" set test "ptype fwp" set output_pass_fwp \ [multi_line "type = Type, extends\\(waypoint\\) :: fancywaypoint" \ " Type waypoint :: waypoint" \ " $logical :: is_fancy" \ "End Type fancywaypoint"] set output_kfail_fwp \ [multi_line "type = Type fancywaypoint" \ " Type waypoint :: waypoint" \ " $logical :: is_fancy" \ "End Type fancywaypoint"] gdb_test_multiple "$test" "$test" { -re "$output_pass_fwp\r\n$gdb_prompt $" { pass "$test" } -re "$output_kfail_fwp\r\n$gdb_prompt $" { kfail "gcc/49475" "$test" } } 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" set test "ptype wp_vla" gdb_test_multiple "$test" "$test" { -re "$output_pass_wp \\(3\\)\r\n$gdb_prompt $" { pass "$test" } -re "$output_kfail_wp \\(3\\)\r\n$gdb_prompt $" { kfail "gcc/49475" "$test" } } 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\\)"