testsuite/lib: add check_optional_entry for GDBInfoSymbols
authorNils-Christian Kempke <nils-christian.kempke@intel.com>
Tue, 31 May 2022 14:43:44 +0000 (16:43 +0200)
committerNils-Christian Kempke <nils-christian.kempke@intel.com>
Tue, 31 May 2022 14:44:55 +0000 (16:44 +0200)
There was already a similar functionality for the GDBInfoModuleSymbols.
This just extends the GDBInfoSymbols.  We will use this feature in a
later commit to make a testcase less GNU specific and more flexible for
other compilers.

Namely, in gdb.fortran/info-types.exp currenlty
GDBInfoSymbols::check_entry is used to verify and test the output of the
info symbols command.  The test, however was written with gfortran as a
basis and some of the tests are not fair with e.g. ifx and ifort as
they test for symbols that are not actually required to be emitted.  The
lines
   GDBInfoSymbols::check_entry "${srcfile}" "" "${character1}"
and
   GDBInfoSymbols::check_entry "${srcfile}" "37" "Type s1;"

check for types that are either not used in the source file (character1)
or should not be emitted by the compiler at global scope (s1) thus no
appearing in the info symbols command.  In order to fix this we will
later use the newly introduced check_optional_entry over check_entry.

gdb/testsuite/lib/sym-info-cmds.exp

index f0272a03349fdc70e7b9d108f91330d9045d8455..ce878f0d5024cf491d1b49241975b13704510c52 100644 (file)
@@ -163,6 +163,16 @@ namespace eval GDBInfoSymbols {
        gdb_assert {[regexp -- $pattern $_header]} $testname
     }
 
+    # Call check_entry_1 with OPTIONAL == 0.
+    proc check_entry { filename lineno text { testname "" } } {
+       check_entry_1 $filename $lineno $text 0 $testname
+    }
+
+    # Call check_entry_1 with OPTIONAL == 1.
+    proc check_optional_entry { filename lineno text { testname "" } } {
+       check_entry_1 $filename $lineno $text 1 $testname
+    }
+
     # Check that we have an entry in _entries matching FILENAME,
     # LINENO, and TEXT.  If LINENO is the empty string it is replaced
     # with the string NONE in order to match a similarly missing line
@@ -174,7 +184,7 @@ namespace eval GDBInfoSymbols {
     # If a matching entry is found then it is removed from the
     # _entries list, this allows us to check for duplicates using the
     # check_no_entry call.
-    proc check_entry { filename lineno text { testname "" } } {
+    proc check_entry_1 { filename lineno text optional testname } {
        variable _entries
        variable _last_command
 
@@ -209,7 +219,11 @@ namespace eval GDBInfoSymbols {
        }
 
        set _entries $new_entries
-       gdb_assert { $found_match } $testname
+       if { $optional && ! $found_match } {
+           unsupported $testname
+       } else {
+           gdb_assert { $found_match } $testname
+       }
     }
 
     # Check that there is no entry in the _entries list matching