diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index c42b1f3c6cf0b85e3791f9de0ccec3aa24ea641e..304919fb19054167f11ef5148bf78c52a4deeb99 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -4404,6 +4404,7 @@ package body Exp_Ch6 is (Prim : Entity_Id; Ancestor_Iface_Prim : Entity_Id := Empty) is + E : Entity_Id; Prim_Typ : Entity_Id; Prim_Op : Entity_Id; Iface_Typ : Entity_Id; @@ -4422,7 +4423,18 @@ package body Exp_Ch6 is if No (Ancestor_Iface_Prim) then Prim_Typ := Scope (DTC_Entity (Alias (Prim))); - Iface_Typ := Scope (DTC_Entity (Abstract_Interface_Alias (Prim))); + + -- Look for the abstract interface subprogram + + E := Abstract_Interface_Alias (Prim); + while Present (E) + and then Is_Abstract (E) + and then not Is_Interface (Scope (DTC_Entity (E))) + loop + E := Alias (E); + end loop; + + Iface_Typ := Scope (DTC_Entity (E)); -- Generate the code of the thunk only when this primitive -- operation is associated with a secondary dispatch table. diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index 7c84a6d85f323ef3e84bd619540f9071123f6260..472c0daa6b9f6c79687ea639ffe44715199e154d 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -682,9 +682,9 @@ package body Exp_Pakd is Act_ST := Underlying_Type (Etype (Aexp)); Create_Packed_Array_Type (Act_ST); - -- Just replace the eEype with the packed array type. This works - -- because the expression will not be further analyzed, and Gigi - -- considers the two types equivalent in any case. + -- Just replace the etype with the packed array type. This works because + -- the expression will not be further analyzed, and Gigi considers the + -- two types equivalent in any case. -- This is not strictly the case ??? If the reference is an actual in -- call, the expansion of the prefix is delayed, and must be reanalyzed, diff --git a/gcc/ada/expander.adb b/gcc/ada/expander.adb index 1c75aa09deea75f20c5afd23011e99e5a80948cb..1c732ce139835bc69ccdc636b30f2d8e1c24772f 100644 --- a/gcc/ada/expander.adb +++ b/gcc/ada/expander.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -75,7 +75,7 @@ package body Expander is procedure Expand (N : Node_Id) is begin -- If we were analyzing a default expression the Full_Analysis flag - -- must have be off. If we are in expansion mode then we must be + -- must be off. If we are in expansion mode then we must be -- performing a full analysis. If we are analyzing a generic then -- Expansion must be off. diff --git a/gcc/ada/g-dyntab.adb b/gcc/ada/g-dyntab.adb index 3cab6bf6703106f396e986a87df2bcb1034f890b..c25b6738aa506a330bbc515e61bb7b7729e85039 100644 --- a/gcc/ada/g-dyntab.adb +++ b/gcc/ada/g-dyntab.adb @@ -286,7 +286,6 @@ package body GNAT.Dynamic_Tables is function Index_Of (Idx : Natural) return Table_Index_Type is J : constant Integer'Base := Table_Index_Type'Pos (First) + Idx - 1; - begin return Table_Index_Type'Val (J); end Index_Of;