The following program prints FAILED; it should print PASSED as per RM 3.4(27), which states:
-- "For the execution of a call on an inherited subprogram, -- a call on the corresponding primitive subprogram of the -- parent or progenitor type is performed; the normal conversion -- of each actual parameter to the subtype of the corresponding -- formal parameter (see 6.4.1) performs any necessary type -- conversion as well." with Text_IO; use Text_IO; procedure Test1 is package Pak1 is type T1 is tagged null record; function Eq(X, Y: T1) return Boolean renames "="; end Pak1; package Pak2 is type T2 is new Pak1.T1 with record F1: Integer; end record; end Pak2; Z1: Pak2.T2 := (F1 => 1); Z2: Pak2.T2 := (F1 => 2); begin if Pak2.Eq(Z1, Z2) = Pak1.Eq(Pak1.T1(Z1), Pak1.T1(Z2)) then Put_Line("PASSED"); else Put_Line("FAILED"); end if; end Test1; -- Summary: Legal program executes incorrectly, RM 3.4(27) Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ludovic at ludovic-brenta dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32181