[gdb/symtab] Prefer def over decl (inter-CU case, with context)
authorTom de Vries <tdevries@suse.de>
Thu, 23 Apr 2020 13:42:47 +0000 (15:42 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 23 Apr 2020 13:42:47 +0000 (15:42 +0200)
commit70bc38f51381698804566504e25d197e8e731d2d
tree7c31c334dd730929ad993f55d6b97d152402e0c8
parentde82891ce5b6d2c8109f512cd0732325f4cd0557
[gdb/symtab] Prefer def over decl (inter-CU case, with context)

This is a follow-up patch on "[PATCH][gdb/symtab] Prefer def over decl
(inter-CU case)" (
https://sourceware.org/pipermail/gdb-patches/2020-April/167489.html ).

Consider the test-case from that patch.  It contains a decl and def of var a
in different CUs, and tests whether var a can be printed using the def, even
if the decl is found first.

However, the test-case does this in a contextless environment, so if we add to
the test-case like this to set the context to the CU containing main:
...
 gdb_test "p a" { = \{1, 2\}}
+
+if ![runto_main] then {
+    fail "can't run to main"
+    return 0
+}
+
+gdb_test "p a" { = \{1, 2\}}
...
then the second test fails, because the decl is found in the context.

Fix this by preferring defs over decls in lookup_global_symbol.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-04-23  Tom de Vries  <tdevries@suse.de>

* symtab.c (lookup_global_symbol): Prefer def over decl.

gdb/testsuite/ChangeLog:

2020-04-23  Tom de Vries  <tdevries@suse.de>

* gdb.base/decl-before-def.exp: Run to main and print a again.
gdb/ChangeLog
gdb/symtab.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/decl-before-def.exp