[Ada] Crash on constrained container in generalized indexing operation
2019-12-16 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch4.adb (Try_Container_Indexing): In the case of a derived container type, use the base type to look for candidate indexing operations, because the object may be a constrained subtype or itype with no explicit declaration. Candidate indexing operations are found in the same scope and list of declarations as the declaration of the base type. From-SVN: r279432
This commit is contained in:
parent
3c08de3407
commit
c85dda7236
@ -1,3 +1,12 @@
|
||||
2019-12-16 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_ch4.adb (Try_Container_Indexing): In the case of a derived
|
||||
container type, use the base type to look for candidate indexing
|
||||
operations, because the object may be a constrained subtype or
|
||||
itype with no explicit declaration. Candidate indexing
|
||||
operations are found in the same scope and list of declarations
|
||||
as the declaration of the base type.
|
||||
|
||||
2019-12-16 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* scng.adb (Scan): In Ada2020, a left-bracket indicates the
|
||||
|
@ -8289,13 +8289,16 @@ package body Sem_Ch4 is
|
||||
-- Note that predefined containers are typically all derived from one of
|
||||
-- the Controlled types. The code below is motivated by containers that
|
||||
-- are derived from other types with a Reference aspect.
|
||||
-- Note as well that we need to examine the base type, given that
|
||||
-- the container object may be a constrained subtype or itype which
|
||||
-- does not have an explicit declaration,
|
||||
|
||||
elsif Is_Derived_Type (C_Type)
|
||||
and then Etype (First_Formal (Entity (Func_Name))) /= Pref_Typ
|
||||
then
|
||||
Func_Name :=
|
||||
Find_Indexing_Operations
|
||||
(T => C_Type,
|
||||
(T => Base_Type (C_Type),
|
||||
Nam => Chars (Func_Name),
|
||||
Is_Constant => Is_Constant_Indexing);
|
||||
end if;
|
||||
|
Loading…
x
Reference in New Issue
Block a user