The following example: package Test is type X is limited interface; function Return_X return X is abstract;
task type Y is new X with end Y; overriding function Return_X return Y; end Test; does not compile with the following message: test.ads:9:20: subprogram "Return_X" is not overriding. As far as I can judge, it because of the following check in gcc/ada/sem_util.adb (function Find_Overridden_Synchronized_Primitive, line 3070): ... and then Etype (Result_Definition (Parent (Def_Id))) = Etype (Result_Definition (Parent (Subp))) ... (the code can be traced back to at least gcc 4.1.2) I am not sure that this is indeed a bug in the compiler and not some obscure feature of the standard, though I failed to find in the ARM any explicit prohibition for controlling-result functions of synchronized types. -- Summary: functions with controlling result do not work with synchronized interfaces Product: gcc Version: 4.3.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Artem dot Andreev at oktetlabs dot ru http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38974