ada: Fix predicate involving array indexing rejected in generic package
The indexing is rejected with the message: error: reference to current instance of type does not denote a type when it is applied to a prefix which is the current instance of the type to which the predicate is applied. There is already a specific handling of component selection for this case present in Find_Selected_Component, so this adds an equivalent specific handling of indexing for this case to Analyze_Indexed_Component_Form. gcc/ada/ChangeLog: PR ada/117569 * sem_ch4.adb (Analyze_Indexed_Component_Form): Do not rewrite the node as a type conversion if it is the current instance of a type in a generic unit. * sem_ch8.adb (Find_Selected_Component): Restrict the special case of the current instance of a type to a generic unit.
This commit is contained in:
parent
06bc21f49d
commit
0d736433f9
2 changed files with 13 additions and 6 deletions
|
@ -3064,10 +3064,14 @@ package body Sem_Ch4 is
|
|||
if Is_Entity_Name (P) and then Present (Entity (P)) then
|
||||
U_N := Entity (P);
|
||||
|
||||
if Is_Type (U_N) then
|
||||
|
||||
-- Reformat node as a type conversion
|
||||
-- If the prefix is a type name, then reformat the node as a type
|
||||
-- conversion, but not if it is the current instance of type name,
|
||||
-- e.g. the expression of a type aspect, when it is analyzed within
|
||||
-- a generic unit.
|
||||
|
||||
if Is_Type (U_N)
|
||||
and then not (Inside_A_Generic and then Is_Current_Instance (P))
|
||||
then
|
||||
E := Remove_Head (Exprs);
|
||||
|
||||
if Present (First (Exprs)) then
|
||||
|
|
|
@ -8498,11 +8498,14 @@ package body Sem_Ch8 is
|
|||
|
||||
-- It is not an error if the prefix is the current instance of
|
||||
-- type name, e.g. the expression of a type aspect, when it is
|
||||
-- analyzed within a generic unit. We still have to verify that a
|
||||
-- component of that name exists, and decorate the node
|
||||
-- analyzed within a generic unit. We still have to verify that
|
||||
-- a component of that name exists, and decorate the node
|
||||
-- accordingly.
|
||||
|
||||
elsif Is_Entity_Name (P) and then Is_Current_Instance (P) then
|
||||
elsif Inside_A_Generic
|
||||
and then Is_Entity_Name (P)
|
||||
and then Is_Current_Instance (P)
|
||||
then
|
||||
declare
|
||||
Comp : Entity_Id;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue