+2008-05-28 Javier Miranda <miranda@adacore.com>
+
+ * sem_ch3.adb (Derive_Progenitor_Primitives): Add missing support
+ for user-defined predefined primitives.
+
+ * sem_util.adb (Matches_Prefixed_View_Profile): Ditto.
+ (Find_Overridden_Synchronized_Primitive): Ditto.
+
+ * sem_ch6.adb (Check_Synchronized_Overriding): Ditto.
+
2008-05-27 Arnaud Charlet <charlet@adacore.com>
* a-ststio.adb, s-direio.adb:
while Present (Prim_Elmt) loop
Iface_Subp := Node (Prim_Elmt);
- if not Is_Predefined_Dispatching_Operation (Iface_Subp) then
+ if not Is_Predefined_Dispatching_Operation (Iface_Subp)
+ or else Comes_From_Source (Iface_Subp)
+ then
E := Find_Primitive_Covering_Interface
(Tagged_Type => Tagged_Type,
Iface_Prim => Iface_Subp);
elsif Present (First_Formal (Def_Id)) then
Formal_Typ := Etype (First_Formal (Def_Id));
+ if Is_Access_Type (Formal_Typ) then
+ Formal_Typ := Directly_Designated_Type (Formal_Typ);
+ end if;
+
if Is_Concurrent_Type (Formal_Typ)
and then not Is_Generic_Actual_Type (Formal_Typ)
then
while Present (Iface_Param) and then Present (Prim_Param) loop
Iface_Id := Defining_Identifier (Iface_Param);
Iface_Typ := Find_Parameter_Type (Iface_Param);
+
+ if Is_Access_Type (Iface_Typ) then
+ Iface_Typ := Directly_Designated_Type (Iface_Typ);
+ end if;
+
Prim_Id := Defining_Identifier (Prim_Param);
Prim_Typ := Find_Parameter_Type (Prim_Param);
+ if Is_Access_Type (Prim_Typ) then
+ Prim_Typ := Directly_Designated_Type (Prim_Typ);
+ end if;
+
-- Case of multiple interface types inside a parameter profile
-- (Obj_Param : in out Iface; ...; Param : Iface)
return Empty;
end if;
+ if Is_Access_Type (Tag_Typ) then
+ Tag_Typ := Directly_Designated_Type (Tag_Typ);
+ end if;
+
-- Traverse the homonym chain, looking at a potentially overridden
-- subprogram that belongs to an implemented interface.