Home | History | Annotate | Line # | Download | only in gdb.fortran
      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