Update copyright year range in header of all files managed by GDB
[binutils-gdb.git] / gdb / testsuite / gdb.mi / mi-fortran-modules.exp
blobefd74aa63f58e77bb29715facd19d00a32c1c945
1 # Copyright 2019-2023 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 # Test -symbol-info-modules, listing Fortran modules.
18 if { [skip_fortran_tests] } { return -1 }
20 load_lib fortran.exp
21 load_lib mi-support.exp
22 set MIFLAGS "-i=mi"
24 standard_testfile "mi-fortran-modules.f90" "mi-fortran-modules-2.f90"
26 if {[build_executable "failed to prepare" ${testfile} \
27          [list $srcfile2 $srcfile] {debug f90}]} {
28     return -1
31 mi_clean_restart $binfile
33 # Avoid shared lib symbols.
34 mi_gdb_test "-gdb-set auto-solib-add off" "\\^done"
36 mi_runto_main
38 # Avoid libc symbols.
39 mi_gdb_test {-interpreter-exec console "nosharedlibrary"}
41 # Patterns to skip optional system modules that appear with later versions of GFortran.
42 set system_modules_pattern \
43     "\{filename=\"\[^\"\]+/ieee/\[^/\]+\.F90\",fullname=\"\[^\"\]+\",symbols=\\\[(\[^\]\]+)\\\]\},.*"
44 set system_module_symbols_pattern \
45     "\{module=\"\[^\"\]*ieee\[^\"\]*\",files=\\\[\{filename=\"\[^\"\]+\",fullname=\"\[^\"\]+\",symbols=\\\[\[^\]\]+\\\]\}\\\]\},.*"
47 mi_gdb_test "101-symbol-info-modules" \
48     "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\"\}\\\]\}\\\]\}" \
49     "-symbol-info-modules"
51 mi_gdb_test "102-symbol-info-modules --name mod\[123\]" \
52     "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\"\}\\\]\}\\\]\}" \
53     "-symbol-info-modules --name mod\[123\]"
55 mi_gdb_test "103-symbol-info-modules --name moduse" \
56     "103\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"41\",name=\"moduse\"\}\\\]\}\\\]\}" \
57     "-symbol-info-modules --name moduse"
59 set test "-symbol-info-module-functions"
60 set cmd "104-symbol-info-module-functions"
61 set mod1_re \
62     "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\}"
63 set mod2_re \
64     "\{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\\);\"\}\\\]\}\\\]\}"
65 set mod3_re \
66     "\{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\\);\"\}\\\]\}\\\]\}"
67 set modmany_re \
68     "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"35\",name=\"modmany::check_some\",type=\"void \\(void\\)\",description=\"void modmany::check_some\\(void\\);\"\}\\\]\}\\\]\}"
69 set moduse_re \
70     "\{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\\);\"\}\\\]\}\\\]\}"
71 set state 0
72 gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ {
73     -re "104\\^done,symbols=\\\[" {
74         if { $state == 0 } { set state 1 }
75         exp_continue
76     }
77     -re "$mod1_re" {
78         if { $state == 1 } { incr state }
79         exp_continue
80     }
81     -re "$mod2_re" {
82         if { $state == 2 } { incr state }
83         exp_continue
84     }
85     -re "$mod3_re" {
86         if { $state == 3 } { incr state }
87         exp_continue
88     }
89     -re "$modmany_re" {
90         if { $state == 4 } { incr state }
91         exp_continue
92     }
93     -re "$moduse_re" {
94         if { $state == 5 } { incr state }
95         exp_continue
96     }
97     -re ${system_module_symbols_pattern} {
98         exp_continue
99     }
100     -re "\\\]\r\n$mi_gdb_prompt$" {
101         if { $state == 6 } {
102             pass $gdb_test_name
103         } else {
104             fail $gdb_test_name
105         }
106     }   
109 mi_gdb_test "105-symbol-info-module-functions --name _all" \
110     "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\\);\"\}\\\]\}\\\]\}\\\]" \
111     "-symbol-info-module-functions --name _all"
113 mi_gdb_test "106-symbol-info-module-functions --module mod\[123\]" \
114     "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\\);\"\}\\\]\}\\\]\}\\\]" \
115     "-symbol-info-module-functions --module mod\[123\]"
117 set int4 [fortran_int4]
119 set mod1_re \
120     "\{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;\"\}\\\]\}\\\]\}"
121 set mod2_re \
122     "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"28\",name=\"mod2::var_i\",type=\"$int4\",description=\"$int4 mod2::var_i;\"\}\\\]\}\\\]\}"
123 set mod3_re \
124     "\{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;\"\}\\\]\}\\\]\}"
125 set modmany_re \
126     "\{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;\"\}\\\]\}\\\]\}"
127 set moduse_re \
128     ",\{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;\"\}\\\]\}\\\]\}"
130 set cmd "107-symbol-info-module-variables"
131 set test "-symbol-info-module-variables"
132 set state 0
133 gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ {
134     -re "107\\^done,symbols=\\\[" {
135         if { $state == 0 } { set state 1 }
136         exp_continue
137     }
138     -re "$mod1_re" {
139         if { $state == 1 } { incr state }
140         exp_continue
141     }
142     -re "$mod2_re" {
143         if { $state == 2 } { incr state }
144         exp_continue
145     }
146     -re "$mod3_re" {
147         if { $state == 3 } { incr state }
148         exp_continue
149     }
150     -re "$modmany_re" {
151         if { $state == 4 } { incr state }
152         exp_continue
153     }
154     -re "$moduse_re" {
155         if { $state == 5 } { incr state }
156         exp_continue
157     }
158     -re ${system_module_symbols_pattern} {
159         exp_continue
160     }
161     -re "\\\]\r\n$mi_gdb_prompt$" {
162         if { $state == 6 } {
163             pass $gdb_test_name
164         } else {
165             fail $gdb_test_name
166         }
167     }