From: charlet Date: Wed, 29 Apr 2009 13:22:02 +0000 (+0000) Subject: 2009-04-29 Ed Schonberg X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=498ac7a5423a7125c54316364b5150eb430c2bc3;p=thirdparty%2Fgcc.git 2009-04-29 Ed Schonberg * lib-xref.adb (Output_Overridden_Op): Follow several levels of derivation when necessary, to find the user-subprogram that is actally being overridden. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146964 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d51fddbcc4e6..7bddd601a15b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2009-04-29 Ed Schonberg + + * 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 * 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 c2e1c59753c2..0e45e2e2bf60 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;