aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/sem_ch4.adb9
-rw-r--r--gcc/ada/sem_type.adb12
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