blob: e5fefe0cf8d2f2ffd2287c159cf7405411663c03 [file] [log] [blame]
# Copyright 2021-2024 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 using whatis and ptype on different configurations of dynamic
# types.
require allow_fortran_tests
standard_testfile ".f90"
load_lib fortran.exp
if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
{debug f90}]} {
return -1
}
if {![fortran_runto_main]} {
perror "Could not run to main."
continue
}
gdb_breakpoint [gdb_get_line_number "Break Here"]
gdb_continue_to_breakpoint "Break Here"
set real4 [fortran_real4]
set int4 [fortran_int4]
gdb_test "whatis var1" "type = ${real4} \\(3\\)"
gdb_test "whatis var2" "type = ${real4}, allocatable \\(4\\)"
gdb_test "whatis var3" "type = Type type1"
gdb_test "whatis var4" "type = Type type2"
gdb_test "whatis var5" "type = Type type3"
gdb_test "whatis var6" "type = Type type4"
gdb_test "whatis var7" "type = Type type5"
gdb_test "ptype var1" "type = ${real4} \\(3\\)"
gdb_test "ptype var2" "type = ${real4}, allocatable \\(4\\)"
gdb_test "ptype var3" \
[ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1" ]
gdb_test "ptype var4" \
[multi_line "type = Type type2" \
" ${int4} :: spacer" \
" Type type1, allocatable :: t2_array\\(3\\)" \
"End Type type2"]
gdb_test "ptype var5" \
[ multi_line "type = Type type3" \
" ${int4} :: spacer" \
" Type type1 :: t3_array\\(3\\)"\
"End Type type3" ]
gdb_test "ptype var6" \
[ multi_line "type = Type type4" \
" ${int4} :: spacer" \
" Type type2, allocatable :: t4_array\\(3\\)" \
"End Type type4" ]
gdb_test "ptype var7" \
[ multi_line "type = Type type5" \
" ${int4} :: spacer" \
" Type type2 :: t5_array\\(4\\)" \
"End Type type5" ]
gdb_test "whatis var3%t1_i" "type = ${int4}"
gdb_test "whatis var4%t2_array" "type = Type type1, allocatable \\(3\\)"
gdb_test "whatis var5%t3_array" "type = Type type1 \\(3\\)"
gdb_test "whatis var6%t4_array" "type = Type type2, allocatable \\(3\\)"
gdb_test "whatis var7%t5_array" "type = Type type2 \\(4\\)"
gdb_test "ptype var3%t1_i" "type = ${int4}"
gdb_test "ptype var4%t2_array" [ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1, allocatable \\(3\\)" ]
gdb_test "ptype var5%t3_array" [ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1 \\(3\\)" ]
gdb_test "ptype var6%t4_array" \
[ multi_line "type = Type type2" \
" ${int4} :: spacer" \
" Type type1, allocatable :: t2_array\\(:\\)" \
"End Type type2, allocatable \\(3\\)" ]
gdb_test "ptype var7%t5_array" \
[ multi_line "type = Type type2" \
" ${int4} :: spacer" \
" Type type1, allocatable :: t2_array\\(:\\)" \
"End Type type2 \\(4\\)" ]
gdb_test "whatis var4%t2_array(1)" "type = Type type1"
gdb_test "whatis var5%t3_array(1)" "type = Type type1"
gdb_test "whatis var6%t4_array(1)" "type = Type type2"
gdb_test "whatis var7%t5_array(1)" "type = Type type2"
gdb_test "ptype var4%t2_array(1)" \
[ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1" ]
gdb_test "ptype var5%t3_array(1)" \
[ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1" ]
gdb_test "ptype var6%t4_array(1)" \
[ multi_line "type = Type type2" \
" ${int4} :: spacer" \
" Type type1, allocatable :: t2_array\\(2\\)" \
"End Type type2" ]
gdb_test "ptype var7%t5_array(1)" \
[ multi_line "type = Type type2" \
" ${int4} :: spacer" \
" Type type1, allocatable :: t2_array\\(2\\)" \
"End Type type2" ]
gdb_test "whatis var4%t2_array(1)%t1_i" "type = ${int4}"
gdb_test "whatis var5%t3_array(1)%t1_i" "type = ${int4}"
gdb_test "whatis var6%t4_array(1)%t2_array" \
"type = Type type1, allocatable \\(2\\)"
gdb_test "whatis var7%t5_array(1)%t2_array" \
"type = Type type1, allocatable \\(2\\)"
gdb_test "ptype var4%t2_array(1)%t1_i" "type = ${int4}"
gdb_test "ptype var5%t3_array(1)%t1_i" "type = ${int4}"
gdb_test "ptype var6%t4_array(1)%t2_array" \
[ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1, allocatable \\(2\\)" ]
gdb_test "ptype var7%t5_array(1)%t2_array" \
[ multi_line "type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1, allocatable \\(2\\)" ]
gdb_test "whatis var6%t4_array(1)%t2_array(1)" \
"type = Type type1"
gdb_test "whatis var7%t5_array(1)%t2_array(1)" \
"type = Type type1"
gdb_test "ptype var6%t4_array(1)%t2_array(1)" \
[ multi_line \
"type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1" ]
gdb_test "ptype var7%t5_array(1)%t2_array(1)" \
[ multi_line \
"type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1" ]
gdb_test "ptype var8%ptr_1%t2_array" \
[ multi_line \
"type = Type type1" \
" ${int4} :: spacer" \
" ${int4} :: t1_i" \
"End Type type1, allocatable \\(3\\)" ]