From: Eric Botcazou <[email protected]>
When detecting calls to subprograms specified for aspects of a type, the
entity denoted by the aspects must go through Ultimate_Alias, since that
of the name of the calls did the same.
gcc/ada/ChangeLog:
* exp_ch6.adb (Expand_Call_Helper): Call Ultimate_Alias for the
detection of calls to subprograms specified for Constant_Indexing.
* exp_util.adb (Is_Indexed_Container): Likewise.
(Is_Iterated_Container): Likewise for Default_Iterator.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/exp_ch6.adb | 5 +++--
gcc/ada/exp_util.adb | 4 ++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index c65ea91cb13..e6e5d50dbbf 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -5331,16 +5331,17 @@ package body Exp_Ch6 is
elsif Nkind (Call_Node) = N_Function_Call
and then Nkind (Parent (Call_Node)) = N_Function_Call
+ and then Is_Entity_Name (Name (Parent (Call_Node)))
then
declare
Aspect : constant Node_Id :=
Find_Value_Of_Aspect
(Etype (Call_Node), Aspect_Constant_Indexing);
+ Subp : constant Entity_Id := Entity (Name (Parent (Call_Node)));
begin
if Present (Aspect)
- and then Is_Entity_Name (Name (Parent (Call_Node)))
- and then Entity (Name (Parent (Call_Node))) = Entity (Aspect)
+ and then Subp = Ultimate_Alias (Entity (Aspect))
then
-- Resolution is now finished, make sure we don't start
-- analysis again because of the duplication.
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index a9424b95880..25f9f077174 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -8945,7 +8945,7 @@ package body Exp_Util is
Aspect := Find_Value_Of_Aspect (Typ, Aspect_Constant_Indexing);
if Present (Aspect) then
- Index := Entity (Aspect);
+ Index := Ultimate_Alias (Entity (Aspect));
-- Examine the statements following the container object and
-- look for a call to the default indexing routine where the
@@ -9030,7 +9030,7 @@ package body Exp_Util is
Aspect := Find_Value_Of_Aspect (Typ, Aspect_Default_Iterator);
if Present (Aspect) then
- Iter := Entity (Aspect);
+ Iter := Ultimate_Alias (Entity (Aspect));
-- Examine the statements following the container object and
-- look for a call to the default iterate routine where the
--
2.43.0