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