aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.fortran/common-block.exp
blob: e8d7c22213456ab42d55fb7b7c04e0a7e93cef21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 2008-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/>.

# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.

if {[skip_fortran_tests]} {
    return 0
}

standard_testfile .f90
load_lib "fortran.exp"

if {[prepare_for_testing "failed to prepare" ${testfile} \
	 $srcfile {debug f90 quiet}]} {
    return -1
}

if ![fortran_runto_main] then {
    perror "couldn't run to main"
    return
}

gdb_breakpoint [gdb_get_line_number "stop-here-out"]
gdb_continue_to_breakpoint "stop-here-out"

# Common block naming with source name /foo/:
#                .symtab  DW_TAG_common_block's DW_AT_name
# Intel Fortran  foo_     foo_
# GNU Fortran    foo_     foo
#set suffix "_"
set suffix ""

# Depending on the compiler being used, the type names can be printed differently.
set int4 [fortran_int4]
set real4 [fortran_real4]
set real8 [fortran_real8]

gdb_test "whatis foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "ptype foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "p foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "whatis fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."
gdb_test "ptype fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."
gdb_test "p fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."

gdb_test_multiple "info locals" "info locals out" {
    # gfortran
    -re -wrap "ix_x = 11\r\niy_y = 22\r\niz_z = 33\r\nix = 1\r\niy = 2\r\niz = 3" {
	pass $gdb_test_name
    }
    # ifx/ifort/flang
    -re -wrap "ix = 1\r\niy = 2\r\niz = 3\r\nix_x = 11\r\niy_y = 22\r\niz_z = 33" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "info common" "info common out" {
    # gfortran
    -re -wrap "Contents of F77 COMMON block 'fo_o':\r\nix_x = 11\r\niy_y = 22\r\niz_z = 33\r\n\r\nContents of F77 COMMON block 'foo':\r\nix = 1\r\niy = 2\r\niz = 3" {
	pass $gdb_test_name
    }
    # ifx/ifort/flang
    -re -wrap "Contents of F77 COMMON block 'foo_?':\r\nix = 1\r\niy = 2\r\niz = 3\r\n\r\nContents of F77 COMMON block 'fo_o_?':\r\nix_x = 11\r\niy_y = 22\r\niz_z = 33" {
	pass $gdb_test_name
    }
}

gdb_test "ptype ix" "type = $int4" "ptype ix out"
gdb_test "ptype iy" "type = $real4" "ptype iy out"
gdb_test "ptype iz" "type = $real8" "ptype iz out"
gdb_test "ptype ix_x" "type = $int4" "ptype ix_x out"
gdb_test "ptype iy_y" "type = $real4" "ptype iy_y out"
gdb_test "ptype iz_z" "type = $real8" "ptype iz_z out"

gdb_test "p ix" " = 1 *" "p ix out"
gdb_test "p iy" " = 2 *" "p iy out"
gdb_test "p iz" " = 3 *" "p iz out"
gdb_test "p ix_x" " = 11 *" "p ix_x out"
gdb_test "p iy_y" " = 22 *" "p iy_y out"
gdb_test "p iz_z" " = 33 *" "p iz_z out"

gdb_breakpoint [gdb_get_line_number "stop-here-in"]
gdb_continue_to_breakpoint "stop-here-in"

gdb_test "whatis foo$suffix" "No symbol \"foo$suffix\" in current context." "whatis foo$suffix in"
gdb_test "ptype foo$suffix" "No symbol \"foo$suffix\" in current context." "ptype foo$suffix in"
gdb_test "p foo$suffix" "No symbol \"foo$suffix\" in current context." "p foo$suffix in"
gdb_test "whatis fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "whatis fo_o$suffix in"
gdb_test "ptype fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "ptype fo_o$suffix in"
gdb_test "p fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "p fo_o$suffix in"

gdb_test_multiple "info locals" "info locals in" {
    # gfortran
    -re -wrap "ix = 11\r\niy2 = 22\r\niz = 33\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3\r\niy = 5\r\niz_z = 55" {
	pass $gdb_test_name
    }
    # ifx
    -re -wrap "ix = 11\r\niy2 = 22\r\niz = 33\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3\r\niz_z = 55\r\niy = 5" {
	pass $gdb_test_name
    }
    # ifort
    -re -wrap "iz_z = 55\r\niy = 5\r\nix = 11\r\niy2 = 22\r\niz = 33\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3" {
	pass $gdb_test_name
    }
}
gdb_test "info common" "Contents of F77 COMMON block 'fo_o':\r\nix = 11\r\niy2 = 22\r\niz = 33\r\n\r\nContents of F77 COMMON block 'foo':\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3" "info common in"

gdb_test "ptype ix" "type = $int4" "ptype ix in"
gdb_test "ptype iy2" "type = $real4" "ptype iy2 in"
gdb_test "ptype iz" "type = $real8" "ptype iz in"
gdb_test "ptype ix_x" "type = $int4" "ptype ix_x in"
gdb_test "ptype iy_y" "type = $real4" "ptype iy_y in"
gdb_test "ptype iz_z2" "type = $real8" "ptype iz_z2 in"

gdb_test "p ix" " = 11 *" "p ix in"
gdb_test "p iy2" " = 22 *" "p iy2 in"
gdb_test "p iz" " = 33 *" "p iz in"
gdb_test "p ix_x" " = 1 *" "p ix_x in"
gdb_test "p iy_y" " = 2 *" "p iy_y in"
gdb_test "p iz_z2" " = 3 *" "p iz_z2 in"