1# Copyright 2019-2020 Free Software Foundation, Inc. 2 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. 7# 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. 12# 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/>. 15 16# Test -symbol-info-modules, listing Fortran modules. 17 18load_lib fortran.exp 19load_lib mi-support.exp 20set MIFLAGS "-i=mi" 21 22standard_testfile "mi-fortran-modules.f90" "mi-fortran-modules-2.f90" 23 24if {[prepare_for_testing "failed to prepare" ${testfile} \ 25 [list $srcfile2 $srcfile] {debug f90}]} { 26 return -1 27} 28 29gdb_exit 30if {[mi_gdb_start]} { 31 continue 32} 33 34mi_run_to_main 35 36 37# Patterns to skip optional system modules that appear with later versions of GFortran. 38set system_modules_pattern \ 39 "\{filename=\"\[^\"\]+/ieee/\[^/\]+\.F90\",fullname=\"\[^\"\]+\",symbols=\\\[(\[^\]\]+)\\\]\}," 40set system_module_symbols_pattern \ 41 "\{module=\"\[^\"\]*ieee\[^\"\]*\",files=\\\[\{filename=\"\[^\"\]+\",fullname=\"\[^\"\]+\",symbols=\\\[\[^\]\]+\\\]\}\\\]\}," 42 43mi_gdb_test "101-symbol-info-modules" \ 44 "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\"\}\\\]\}\\\]\}" \ 45 "-symbol-info-modules" 46 47mi_gdb_test "102-symbol-info-modules --name mod\[123\]" \ 48 "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\"\}\\\]\}\\\]\}" \ 49 "-symbol-info-modules --name mod\[123\]" 50 51mi_gdb_test "103-symbol-info-modules --name moduse" \ 52 "103\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"41\",name=\"moduse\"\}\\\]\}\\\]\}" \ 53 "-symbol-info-modules --name moduse" 54 55set test "-symbol-info-module-functions" 56set cmd "104-symbol-info-module-functions" 57set mod1_re \ 58 "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\}" 59set mod2_re \ 60 "\{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\\);\"\}\\\]\}\\\]\}" 61set mod3_re \ 62 "\{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\\);\"\}\\\]\}\\\]\}" 63set modmany_re \ 64 "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"35\",name=\"modmany::check_some\",type=\"void \\(void\\)\",description=\"void modmany::check_some\\(void\\);\"\}\\\]\}\\\]\}" 65set moduse_re \ 66 "\{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\\);\"\}\\\]\}\\\]\}" 67set state 0 68gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ { 69 -re "104\\^done,symbols=\\\[" { 70 if { $state == 0 } { set state 1 } 71 exp_continue 72 } 73 -re "$mod1_re" { 74 if { $state == 1 } { incr state } 75 exp_continue 76 } 77 -re "$mod2_re" { 78 if { $state == 2 } { incr state } 79 exp_continue 80 } 81 -re "$mod3_re" { 82 if { $state == 3 } { incr state } 83 exp_continue 84 } 85 -re "$modmany_re" { 86 if { $state == 4 } { incr state } 87 exp_continue 88 } 89 -re "$moduse_re" { 90 if { $state == 5 } { incr state } 91 exp_continue 92 } 93 -re ${system_module_symbols_pattern} { 94 exp_continue 95 } 96 -re "\\\]\r\n$mi_gdb_prompt$" { 97 if { $state == 6 } { 98 pass $gdb_test_name 99 } else { 100 fail $gdb_test_name 101 } 102 } 103} 104 105mi_gdb_test "105-symbol-info-module-functions --name _all" \ 106 "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\\);\"\}\\\]\}\\\]\}\\\]" \ 107 "-symbol-info-module-functions --name _all" 108 109mi_gdb_test "106-symbol-info-module-functions --module mod\[123\]" \ 110 "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\\);\"\}\\\]\}\\\]\}\\\]" \ 111 "-symbol-info-module-functions --module mod\[123\]" 112 113set int4 [fortran_int4] 114 115set mod1_re \ 116 "\{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;\"\}\\\]\}\\\]\}" 117set mod2_re \ 118 "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"28\",name=\"mod2::var_i\",type=\"$int4\",description=\"$int4 mod2::var_i;\"\}\\\]\}\\\]\}" 119set mod3_re \ 120 "\{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;\"\}\\\]\}\\\]\}" 121set modmany_re \ 122 "\{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;\"\}\\\]\}\\\]\}" 123set moduse_re \ 124 ",\{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;\"\}\\\]\}\\\]\}" 125 126set cmd "107-symbol-info-module-variables" 127set test "-symbol-info-module-variables" 128set state 0 129gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ { 130 -re "107\\^done,symbols=\\\[" { 131 if { $state == 0 } { set state 1 } 132 exp_continue 133 } 134 -re "$mod1_re" { 135 if { $state == 1 } { incr state } 136 exp_continue 137 } 138 -re "$mod2_re" { 139 if { $state == 2 } { incr state } 140 exp_continue 141 } 142 -re "$mod3_re" { 143 if { $state == 3 } { incr state } 144 exp_continue 145 } 146 -re "$modmany_re" { 147 if { $state == 4 } { incr state } 148 exp_continue 149 } 150 -re "$moduse_re" { 151 if { $state == 5 } { incr state } 152 exp_continue 153 } 154 -re ${system_module_symbols_pattern} { 155 exp_continue 156 } 157 -re "\\\]\r\n$mi_gdb_prompt$" { 158 if { $state == 6 } { 159 pass $gdb_test_name 160 } else { 161 fail $gdb_test_name 162 } 163 } 164} 165