blob: 00cfffa0b63232b666cd0ee2c591e356dd4aede4 [file] [log] [blame]
# 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"
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\\)"