diff options
-rw-r--r-- | gcc/ada/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/ada/sem_ch4.adb | 9 | ||||
-rw-r--r-- | gcc/ada/sem_type.adb | 12 |
3 files changed, 32 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index bd90c5c..2b9eed4 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,17 @@ +2015-11-18 Ed Schonberg <schonberg@adacore.com> + + * sem_ch4.adb (Try_Container_Indexing): When constructing the + parameter list for the potentially overloaded calls to indexing + functions, do not propagate overloadings if the actual is a named + association: overloadings appear directly on the expression in + the association. + +2015-11-18 Ed Schonberg <schonberg@adacore.com> + + * sem_type.adb (Interface_Present_In_Ancestor): If the type is + incomplete, the list of ancestors is found either on the full + view or the non-limited view of the type. + 2015-11-18 Nicolas Roche <roche@adacore.com> * sysdep.c (__gnat_localtime_tzoff): On Windows platform diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 9ac6f8f..94ecc23 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -7437,7 +7437,14 @@ package body Sem_Ch4 is Arg := First (Exprs); while Present (Arg) loop New_Arg := Relocate_Node (Arg); - Save_Interps (Arg, New_Arg); + + -- The arguments can be parameter associations, in which case the + -- explicit actual parameter carries the overloadings. + + if Nkind (New_Arg) /= N_Parameter_Association then + Save_Interps (Arg, New_Arg); + end if; + Append (New_Arg, Assoc); Next (Arg); end loop; diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb index d5be94e..f5826c4 100644 --- a/gcc/ada/sem_type.adb +++ b/gcc/ada/sem_type.adb @@ -2619,8 +2619,16 @@ package body Sem_Type is end if; if Ekind (Target_Typ) = E_Incomplete_Type then - pragma Assert (Present (Non_Limited_View (Target_Typ))); - Target_Typ := Non_Limited_View (Target_Typ); + + -- We must have either a full view or a non-limited view of the type + -- to locate the list of ancestors. + + if Present (Full_View (Target_Typ)) then + Target_Typ := Full_View (Target_Typ); + else + pragma Assert (Present (Non_Limited_View (Target_Typ))); + Target_Typ := Non_Limited_View (Target_Typ); + end if; -- Protect the frontend against previously detected errors |