aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2009-04-29 13:22:02 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-29 15:22:02 +0200
commit96b20738216dfdf39b57c2a6eddff7c42c33f091 (patch)
treed789ce1d1b4f979b0fcaabdc8a2627ed2a00a663
parent3b4ebfc31bb3c1a81119f71e0d7cf08952471019 (diff)
downloadgcc-96b20738216dfdf39b57c2a6eddff7c42c33f091.zip
gcc-96b20738216dfdf39b57c2a6eddff7c42c33f091.tar.gz
gcc-96b20738216dfdf39b57c2a6eddff7c42c33f091.tar.bz2
lib-xref.adb (Output_Overridden_Op): Follow several levels of derivation when necessary...
2009-04-29 Ed Schonberg <schonberg@adacore.com> * lib-xref.adb (Output_Overridden_Op): Follow several levels of derivation when necessary, to find the user-subprogram that is actally being overridden. From-SVN: r146964
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/lib-xref.adb12
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d51fddb..7bddd60 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-29 Ed Schonberg <schonberg@adacore.com>
+
+ * lib-xref.adb (Output_Overridden_Op): Follow several levels of
+ derivation when necessary, to find the user-subprogram that is actally
+ being overridden.
+
2009-04-29 Robert Dewar <dewar@adacore.com>
* sem_util.adb (May_Be_Lvalue): Fix cases involving indexed/selected
diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb
index c2e1c59..0e45e2e 100644
--- a/gcc/ada/lib-xref.adb
+++ b/gcc/ada/lib-xref.adb
@@ -1696,8 +1696,20 @@ package body Lib.Xref is
if No (Old_E) then
return;
+ -- Follow alias chain if one is present
+
elsif Present (Alias (Old_E)) then
+
+ -- The subprogram may have been implicitly inherited
+ -- through several levels of derivation, so find the
+ -- ultimate (source) ancestor.
+
Op := Alias (Old_E);
+ while Present (Alias (Op)) loop
+ Op := Alias (Op);
+ end loop;
+
+ -- Normal case of no alias present
else
Op := Old_E;