1 # Copyright 2019-2024 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 # This file tests 'info modules', 'info module functions', and 'info 17 # module variables'. 18 19 load_lib "fortran.exp" 20 load_lib "sym-info-cmds.exp" 21 22 require allow_fortran_tests 23 24 standard_testfile info-types.f90 info-types-2.f90 25 26 if { [prepare_for_testing "failed to prepare" $testfile \ 27 [list $srcfile2 $srcfile] {debug f90}] } { 28 return -1 29 } 30 31 if { ![fortran_runto_main] } { 32 perror "Could not run to main." 33 return 34 } 35 36 # Avoid libc symbols. 37 gdb_test "nosharedlibrary" 38 39 set logical4 [fortran_logical4] 40 set integer4 [fortran_int4] 41 set real4 [fortran_real4] 42 43 # Test 'info modules' command. 44 45 GDBInfoSymbols::run_command "info modules" 46 GDBInfoSymbols::check_header "All defined modules:" 47 GDBInfoSymbols::check_entry "${srcfile2}" "18" "mod2" 48 GDBInfoSymbols::check_entry "${srcfile}" "16" "mod1" 49 GDBInfoSymbols::check_no_entry "${srcfile}" 50 GDBInfoSymbols::check_no_entry "${srcfile2}" 51 52 GDBInfoSymbols::run_command "info modules 1" 53 GDBInfoSymbols::check_header \ 54 "All modules matching regular expression \"1\":" 55 GDBInfoSymbols::check_entry "${srcfile}" "16" "mod1" 56 GDBInfoSymbols::check_no_entry "${srcfile}" 57 GDBInfoSymbols::check_no_entry "${srcfile2}" 58 59 GDBInfoSymbols::run_command "info modules 2" 60 GDBInfoSymbols::check_header \ 61 "All modules matching regular expression \"2\":" 62 GDBInfoSymbols::check_entry "${srcfile2}" "18" "mod2" 63 GDBInfoSymbols::check_no_entry "${srcfile}" 64 GDBInfoSymbols::check_no_entry "${srcfile2}" 65 66 GDBInfoSymbols::run_command "info modules mod" 67 GDBInfoSymbols::check_header \ 68 "All modules matching regular expression \"mod\":" 69 GDBInfoSymbols::check_entry "${srcfile2}" "18" "mod2" 70 GDBInfoSymbols::check_entry "${srcfile}" "16" "mod1" 71 GDBInfoSymbols::check_no_entry "${srcfile}" 72 GDBInfoSymbols::check_no_entry "${srcfile2}" 73 74 # Test 'info module functions'. 75 76 GDBInfoModuleSymbols::run_command "info module functions" 77 GDBInfoModuleSymbols::check_header "All functions in all modules:" 78 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "22" \ 79 "void mod2::sub_m2_a\\(${integer4}, ${logical4}\\);" 80 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "30" \ 81 "${logical4} mod2::sub_m2_b\\(${real4}\\);" 82 GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \ 83 "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);" 84 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \ 85 "void mod1::sub_m1_a\\(${integer4}\\);" 86 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "31" \ 87 "${integer4} mod1::sub_m1_b\\(void\\);" 88 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 89 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 90 91 GDBInfoModuleSymbols::run_command "info module functions -m mod1" 92 GDBInfoModuleSymbols::check_header \ 93 "All functions in all modules matching regular expression \"mod1\":" 94 GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \ 95 "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);" 96 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \ 97 "void mod1::sub_m1_a\\(${integer4}\\);" 98 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "31" \ 99 "${integer4} mod1::sub_m1_b\\(void\\);" 100 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 101 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 102 103 GDBInfoModuleSymbols::run_command "info module functions -t integer" 104 GDBInfoModuleSymbols::check_header \ 105 "All functions with type matching regular expression \"integer\" in all modules:" 106 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "22" \ 107 "void mod2::sub_m2_a\\(${integer4}, ${logical4}\\);" 108 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \ 109 "void mod1::sub_m1_a\\(${integer4}\\);" 110 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "31" \ 111 "${integer4} mod1::sub_m1_b\\(void\\);" 112 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 113 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 114 115 # Test 'info module variables'. 116 117 GDBInfoModuleSymbols::run_command "info module variables" 118 GDBInfoModuleSymbols::check_header "All variables in all modules:" 119 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "19" \ 120 "${integer4} mod2::mod2_var_1;" 121 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \ 122 "${real4} mod2::mod2_var_2;" 123 GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \ 124 "Type m1t1 mod1::__def_init_mod1_M1t1;" 125 GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \ 126 "Type __vtype_mod1_M1t1 mod1::__vtab_mod1_M1t1;" 127 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "21" \ 128 "${real4} mod1::mod1_var_1;" 129 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "22" \ 130 "${integer4} mod1::mod1_var_2;" 131 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 132 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 133 134 GDBInfoModuleSymbols::run_command "info module variables -t real" 135 GDBInfoModuleSymbols::check_header \ 136 "All variables with type matching regular expression \"real\" in all modules:" 137 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \ 138 "${real4} mod2::mod2_var_2;" 139 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "21" \ 140 "${real4} mod1::mod1_var_1;" 141 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 142 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 143 144 GDBInfoModuleSymbols::run_command "info module variables -m mod2" 145 GDBInfoModuleSymbols::check_header \ 146 "All variables in all modules matching regular expression \"mod2\":" 147 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "19" \ 148 "${integer4} mod2::mod2_var_1;" 149 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \ 150 "${real4} mod2::mod2_var_2;" 151 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 152 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 153 154 GDBInfoModuleSymbols::run_command "info module variables -m mod2 -t real" 155 GDBInfoModuleSymbols::check_header \ 156 "All variables with type matching regular expression \"real\" in all modules matching regular expression \"mod2\":" 157 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \ 158 "${real4} mod2::mod2_var_2;" 159 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 160 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 161 162 GDBInfoModuleSymbols::run_command "info module variables _1" 163 GDBInfoModuleSymbols::check_header \ 164 "All variables matching regular expression \"_1\" in all modules:" 165 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "19" \ 166 "${integer4} mod2::mod2_var_1;" 167 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "21" \ 168 "${real4} mod1::mod1_var_1;" 169 GDBInfoModuleSymbols::check_no_entry "${srcfile}" ".*" 170 GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*" 171 172