diff options
author | Ed Schonberg <schonberg@adacore.com> | 2009-04-29 13:22:02 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-04-29 15:22:02 +0200 |
commit | 96b20738216dfdf39b57c2a6eddff7c42c33f091 (patch) | |
tree | d789ce1d1b4f979b0fcaabdc8a2627ed2a00a663 | |
parent | 3b4ebfc31bb3c1a81119f71e0d7cf08952471019 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/lib-xref.adb | 12 |
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; |