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:
Tom Tromey
2023-04-04 09:25:21 -06:00
parent 44a37a9853
commit e9151f7d62
4 changed files with 28 additions and 0 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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;

View File

@@ -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;