blob: 5ea2aa48a050bb00e4c9893fc14e2aa4122f386d [file] [log] [blame]
# Copyright 2021 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.
if {[skip_fortran_tests]} { return -1 }
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"
gdb_test "whatis var1" "type = real\\(kind=4\\) \\(3\\)"
gdb_test "whatis var2" "type = real\\(kind=4\\), 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 = real\\(kind=4\\) \\(3\\)"
gdb_test "ptype var2" "type = real\\(kind=4\\), allocatable \\(4\\)"
gdb_test "ptype var3" \
[ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1" ]
gdb_test "ptype var4" \
[multi_line "type = Type type2" \
" integer\\(kind=4\\) :: spacer" \
" Type type1, allocatable :: t2_array\\(3\\)" \
"End Type type2"]
gdb_test "ptype var5" \
[ multi_line "type = Type type3" \
" integer\\(kind=4\\) :: spacer" \
" Type type1 :: t3_array\\(3\\)"\
"End Type type3" ]
gdb_test "ptype var6" \
[ multi_line "type = Type type4" \
" integer\\(kind=4\\) :: spacer" \
" Type type2, allocatable :: t4_array\\(3\\)" \
"End Type type4" ]
gdb_test "ptype var7" \
[ multi_line "type = Type type5" \
" integer\\(kind=4\\) :: spacer" \
" Type type2 :: t5_array\\(4\\)" \
"End Type type5" ]
gdb_test "whatis var3%t1_i" "type = integer\\(kind=4\\)"
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 = integer\\(kind=4\\)"
gdb_test "ptype var4%t2_array" [ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1, allocatable \\(3\\)" ]
gdb_test "ptype var5%t3_array" [ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1 \\(3\\)" ]
gdb_test "ptype var6%t4_array" \
[ multi_line "type = Type type2" \
" integer\\(kind=4\\) :: spacer" \
" Type type1, allocatable :: t2_array\\(:\\)" \
"End Type type2, allocatable \\(3\\)" ]
gdb_test "ptype var7%t5_array" \
[ multi_line "type = Type type2" \
" integer\\(kind=4\\) :: 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" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1" ]
gdb_test "ptype var5%t3_array(1)" \
[ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1" ]
gdb_test "ptype var6%t4_array(1)" \
[ multi_line "type = Type type2" \
" integer\\(kind=4\\) :: spacer" \
" Type type1, allocatable :: t2_array\\(2\\)" \
"End Type type2" ]
gdb_test "ptype var7%t5_array(1)" \
[ multi_line "type = Type type2" \
" integer\\(kind=4\\) :: spacer" \
" Type type1, allocatable :: t2_array\\(2\\)" \
"End Type type2" ]
gdb_test "whatis var4%t2_array(1)%t1_i" "type = integer\\(kind=4\\)"
gdb_test "whatis var5%t3_array(1)%t1_i" "type = integer\\(kind=4\\)"
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 = integer\\(kind=4\\)"
gdb_test "ptype var5%t3_array(1)%t1_i" "type = integer\\(kind=4\\)"
gdb_test "ptype var6%t4_array(1)%t2_array" \
[ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1, allocatable \\(2\\)" ]
gdb_test "ptype var7%t5_array(1)%t2_array" \
[ multi_line "type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: 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" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1" ]
gdb_test "ptype var7%t5_array(1)%t2_array(1)" \
[ multi_line \
"type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1" ]
gdb_test "ptype var8%ptr_1%t2_array" \
[ multi_line \
"type = Type type1" \
" integer\\(kind=4\\) :: spacer" \
" integer\\(kind=4\\) :: t1_i" \
"End Type type1, allocatable \\(3\\)" ]