1251881Speter# Copyright 2019-2020 Free Software Foundation, Inc.
2251881Speter
3251881Speter# This program is free software; you can redistribute it and/or modify
4251881Speter# it under the terms of the GNU General Public License as published by
5251881Speter# the Free Software Foundation; either version 3 of the License, or
6251881Speter# (at your option) any later version.
7251881Speter#
8251881Speter# This program is distributed in the hope that it will be useful,
9251881Speter# but WITHOUT ANY WARRANTY; without even the implied warranty of
10251881Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11251881Speter# GNU General Public License for more details.
12251881Speter#
13251881Speter# You should have received a copy of the GNU General Public License
14251881Speter# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15251881Speter
16251881Speter# Test -symbol-info-modules, listing Fortran modules.
17251881Speter
18251881Speterload_lib fortran.exp
19251881Speterload_lib mi-support.exp
20251881Speterset MIFLAGS "-i=mi"
21251881Speter
22251881Speterstandard_testfile "mi-fortran-modules.f90" "mi-fortran-modules-2.f90"
23251881Speter
24251881Speterif {[prepare_for_testing "failed to prepare" ${testfile} \
25251881Speter	 [list $srcfile2 $srcfile] {debug f90}]} {
26251881Speter    return -1
27251881Speter}
28251881Speter
29251881Spetergdb_exit
30251881Speterif {[mi_gdb_start]} {
31251881Speter    continue
32251881Speter}
33251881Speter
34251881Spetermi_run_to_main
35251881Speter
36251881Speter
37251881Speter# Patterns to skip optional system modules that appear with later versions of GFortran.
38251881Speterset system_modules_pattern \
39251881Speter    "\{filename=\"\[^\"\]+/ieee/\[^/\]+\.F90\",fullname=\"\[^\"\]+\",symbols=\\\[(\[^\]\]+)\\\]\},"
40251881Speterset system_module_symbols_pattern \
41251881Speter    "\{module=\"\[^\"\]*ieee\[^\"\]*\",files=\\\[\{filename=\"\[^\"\]+\",fullname=\"\[^\"\]+\",symbols=\\\[\[^\]\]+\\\]\}\\\]\},"
42251881Speter
43251881Spetermi_gdb_test "101-symbol-info-modules" \
44251881Speter    "101\\^done,symbols=\{debug=\\\[($system_modules_pattern)*\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"16\",name=\"mod1\"\},\{line=\"27\",name=\"mod2\"\}\\\]\},\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"16\",name=\"mod3\"\},\{line=\"32\",name=\"modmany\"\},\{line=\"41\",name=\"moduse\"\}\\\]\}\\\]\}" \
45251881Speter    "-symbol-info-modules"
46251881Speter
47251881Spetermi_gdb_test "102-symbol-info-modules --name mod\[123\]" \
48251881Speter    "102\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"16\",name=\"mod1\"\},\{line=\"27\",name=\"mod2\"\}\\\]\},\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"16\",name=\"mod3\"\}\\\]\}\\\]\}" \
49251881Speter    "-symbol-info-modules --name mod\[123\]"
50251881Speter
51251881Spetermi_gdb_test "103-symbol-info-modules --name moduse" \
52251881Speter    "103\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"41\",name=\"moduse\"\}\\\]\}\\\]\}" \
53251881Speter    "-symbol-info-modules --name moduse"
54251881Speter
55251881Speterset test "-symbol-info-module-functions"
56251881Speterset cmd "104-symbol-info-module-functions"
57251881Speterset mod1_re \
58251881Speter    "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\}"
59251881Speterset mod2_re \
60251881Speter    "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"30\",name=\"mod2::check_var_i\",type=\"void \\(void\\)\",description=\"void mod2::check_var_i\\(void\\);\"\}\\\]\}\\\]\}"
61251881Speterset mod3_re \
62251881Speter    "\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\},\{line=\"27\",name=\"mod3::check_mod2\",type=\"void \\(void\\)\",description=\"void mod3::check_mod2\\(void\\);\"\}\\\]\}\\\]\}"
63251881Speterset modmany_re \
64251881Speter    "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"35\",name=\"modmany::check_some\",type=\"void \\(void\\)\",description=\"void modmany::check_some\\(void\\);\"\}\\\]\}\\\]\}"
65251881Speterset moduse_re \
66251881Speter    "\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"44\",name=\"moduse::check_all\",type=\"void \\(void\\)\",description=\"void moduse::check_all\\(void\\);\"\},\{line=\"49\",name=\"moduse::check_var_x\",type=\"void \\(void\\)\",description=\"void moduse::check_var_x\\(void\\);\"\}\\\]\}\\\]\}"
67251881Speterset state 0
68251881Spetergdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ {
69251881Speter    -re "104\\^done,symbols=\\\[" {
70251881Speter	if { $state == 0 } { set state 1 }
71251881Speter	exp_continue
72251881Speter    }
73251881Speter    -re "$mod1_re" {
74251881Speter	if { $state == 1 } { incr state }
75251881Speter	exp_continue
76251881Speter    }
77251881Speter    -re "$mod2_re" {
78251881Speter	if { $state == 2 } { incr state }
79251881Speter	exp_continue
80251881Speter    }
81251881Speter    -re "$mod3_re" {
82251881Speter	if { $state == 3 } { incr state }
83251881Speter	exp_continue
84251881Speter    }
85251881Speter    -re "$modmany_re" {
86251881Speter	if { $state == 4 } { incr state }
87251881Speter	exp_continue
88251881Speter    }
89251881Speter    -re "$moduse_re" {
90251881Speter	if { $state == 5 } { incr state }
91251881Speter	exp_continue
92251881Speter    }
93251881Speter    -re ${system_module_symbols_pattern} {
94251881Speter	exp_continue
95251881Speter    }
96251881Speter    -re "\\\]\r\n$mi_gdb_prompt$" {
97251881Speter	if { $state == 6 } {
98251881Speter	    pass $gdb_test_name
99251881Speter	} else {
100251881Speter	    fail $gdb_test_name
101251881Speter	}
102251881Speter    }
103251881Speter}
104251881Speter
105251881Spetermi_gdb_test "105-symbol-info-module-functions --name _all" \
106251881Speter    "105\\^done,symbols=\\\[\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"44\",name=\"moduse::check_all\",type=\"void \\(void\\)\",description=\"void moduse::check_all\\(void\\);\"\}\\\]\}\\\]\}\\\]" \
107251881Speter    "-symbol-info-module-functions --name _all"
108251881Speter
109251881Spetermi_gdb_test "106-symbol-info-module-functions --module mod\[123\]" \
110251881Speter    "106\\^done,symbols=\\\[\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"30\",name=\"mod2::check_var_i\",type=\"void \\(void\\)\",description=\"void mod2::check_var_i\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\},\{line=\"27\",name=\"mod3::check_mod2\",type=\"void \\(void\\)\",description=\"void mod3::check_mod2\\(void\\);\"\}\\\]\}\\\]\}\\\]" \
111251881Speter    "-symbol-info-module-functions --module mod\[123\]"
112251881Speter
113251881Speterset int4 [fortran_int4]
114251881Speter
115251881Speterset mod1_re \
116251881Speter    "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"18\",name=\"mod1::var_const\",type=\"$int4\",description=\"$int4 mod1::var_const;\"\},\{line=\"17\",name=\"mod1::var_i\",type=\"$int4\",description=\"$int4 mod1::var_i;\"\}\\\]\}\\\]\}"
117251881Speterset mod2_re \
118251881Speter    "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"28\",name=\"mod2::var_i\",type=\"$int4\",description=\"$int4 mod2::var_i;\"\}\\\]\}\\\]\}"
119251881Speterset mod3_re \
120251881Speter    "\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"18\",name=\"mod3::mod1\",type=\"$int4\",description=\"$int4 mod3::mod1;\"\},\{line=\"17\",name=\"mod3::mod2\",type=\"$int4\",description=\"$int4 mod3::mod2;\"\},\{line=\"19\",name=\"mod3::var_i\",type=\"$int4\",description=\"$int4 mod3::var_i;\"\}\\\]\}\\\]\}"
121251881Speterset modmany_re \
122251881Speter    "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"33\",name=\"modmany::var_a\",type=\"$int4\",description=\"$int4 modmany::var_a;\"\},\{line=\"33\",name=\"modmany::var_b\",type=\"$int4\",description=\"$int4 modmany::var_b;\"\},\{line=\"33\",name=\"modmany::var_c\",type=\"$int4\",description=\"$int4 modmany::var_c;\"\},\{line=\"33\",name=\"modmany::var_i\",type=\"$int4\",description=\"$int4 modmany::var_i;\"\}\\\]\}\\\]\}"
123251881Speterset moduse_re \
124251881Speter    ",\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"42\",name=\"moduse::var_x\",type=\"$int4\",description=\"$int4 moduse::var_x;\"\},\{line=\"42\",name=\"moduse::var_y\",type=\"$int4\",description=\"$int4 moduse::var_y;\"\}\\\]\}\\\]\}"
125251881Speter
126251881Speterset cmd "107-symbol-info-module-variables"
127251881Speterset test "-symbol-info-module-variables"
128251881Speterset state 0
129251881Spetergdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ {
130251881Speter    -re "107\\^done,symbols=\\\[" {
131251881Speter	if { $state == 0 } { set state 1 }
132251881Speter	exp_continue
133251881Speter    }
134251881Speter    -re "$mod1_re" {
135251881Speter	if { $state == 1 } { incr state }
136251881Speter	exp_continue
137251881Speter    }
138251881Speter    -re "$mod2_re" {
139251881Speter	if { $state == 2 } { incr state }
140251881Speter	exp_continue
141251881Speter    }
142251881Speter    -re "$mod3_re" {
143251881Speter	if { $state == 3 } { incr state }
144251881Speter	exp_continue
145251881Speter    }
146251881Speter    -re "$modmany_re" {
147251881Speter	if { $state == 4 } { incr state }
148251881Speter	exp_continue
149251881Speter    }
150251881Speter    -re "$moduse_re" {
151251881Speter	if { $state == 5 } { incr state }
152251881Speter	exp_continue
153251881Speter    }
154251881Speter    -re ${system_module_symbols_pattern} {
155251881Speter	exp_continue
156251881Speter    }
157251881Speter    -re "\\\]\r\n$mi_gdb_prompt$" {
158251881Speter	if { $state == 6 } {
159269847Speter	    pass $gdb_test_name
160251881Speter	} else {
161269847Speter	    fail $gdb_test_name
162269847Speter	}
163269847Speter    }
164269847Speter}
165269847Speter