[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:
Ed Schonberg 2019-12-16 10:34:42 +00:00 committed by Pierre-Marie de Rodat
parent 3c08de3407
commit c85dda7236
2 changed files with 13 additions and 1 deletions

View File

@ -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

View File

@ -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;