From: Ed Schonberg Date: Mon, 16 Dec 2019 10:34:42 +0000 (+0000) Subject: [Ada] Crash on constrained container in generalized indexing operation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c85dda723615051018ea8e19e5f0431e5ffdae55;p=gcc.git [Ada] Crash on constrained container in generalized indexing operation 2019-12-16 Ed Schonberg 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 79d204255dd..5533c1cca53 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,12 @@ +2019-12-16 Ed Schonberg + + * 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 * scng.adb (Scan): In Ada2020, a left-bracket indicates the diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 80be4d66368..0158623d496 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -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;