forked from Imagelibrary/binutils-gdb
Fix regression due to Pragma Import series
A co-worker here at AdaCore discovered that the Pragma Import series caused a rgression. When debugging gnat1, gdb started asking for overload resolution like: (gdb) call pp(n) Multiple matches for pp [0] cancel [1] pp (types.union_id) at ../../gcc/gcc/ada/treepr.adb:511 [2] treepr.pp (types.union_id) at ../../gcc/gcc/ada/treepr.adb:511 This worked before the series, and is strange anyway, because the matches refer to the same function. This patch adds a test case for this situation and fixes the bug by pruning identical functions in remove_extra_symbols.
This commit is contained in:
@@ -5079,6 +5079,20 @@ remove_extra_symbols (std::vector<struct block_symbol> &syms)
|
||||
}
|
||||
}
|
||||
|
||||
/* Two functions with the same block are identical. */
|
||||
|
||||
else if (syms[i].symbol->aclass () == LOC_BLOCK)
|
||||
{
|
||||
for (j = 0; !remove_p && j < syms.size (); j += 1)
|
||||
{
|
||||
if (i != j
|
||||
&& syms[j].symbol->aclass () == LOC_BLOCK
|
||||
&& (syms[i].symbol->value_block ()
|
||||
== syms[j].symbol->value_block ()))
|
||||
remove_p = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (remove_p)
|
||||
syms.erase (syms.begin () + i);
|
||||
else
|
||||
|
||||
@@ -56,3 +56,5 @@ gdb_breakpoint "local_imported_func" message
|
||||
gdb_breakpoint "pkg.exported_func_ada" message
|
||||
gdb_breakpoint "exported_func_ada" message
|
||||
gdb_breakpoint "exported_func" message
|
||||
|
||||
gdb_test "print copy" " = 42"
|
||||
|
||||
@@ -20,6 +20,13 @@ package body Pkg is
|
||||
return Imported_Var_Ada;
|
||||
end Exported_Func_Ada;
|
||||
|
||||
function base return Integer is
|
||||
begin
|
||||
return Imported_Var_Ada;
|
||||
end base;
|
||||
|
||||
function copy return Integer renames base;
|
||||
|
||||
procedure Do_Nothing (A : System.Address) is
|
||||
begin
|
||||
null;
|
||||
|
||||
@@ -28,6 +28,11 @@ package Pkg is
|
||||
function Exported_Func_Ada return Integer;
|
||||
pragma Export (C, Exported_Func_Ada, "exported_func");
|
||||
|
||||
function base return Integer;
|
||||
pragma Export (Ada, base);
|
||||
function copy return Integer;
|
||||
pragma Export (Ada, copy);
|
||||
|
||||
procedure Do_Nothing (A : System.Address);
|
||||
|
||||
end Pkg;
|
||||
|
||||
Reference in New Issue
Block a user