This patch avoids reporting a redundant error on primitives inherited from primitives.
package Test_Pkg is type I1 is Interface; procedure P (A : I1) is abstract; type I2 is interface; procedure Q (B : I2) is abstract; type DT2 is new I1 and I2 with null record; procedure P (X : DT2); end; Command: gcc -c -gnat05 test_pkg.ads New output: test_pkg.ads:8:12: type must be declared abstract or "Q" overridden test_pkg.ads:8:12: "Q" has been inherited from subprogram at line 6 Tested on x86_64-pc-linux-gnu, committed on trunk 2011-09-02 Javier Miranda <mira...@adacore.com> * sem_ch3.adb (Check_Abstract_Overriding): When traversing the chain of aliased subprograms avoid reporting a redundant error on the current entity.
Index: sem_ch3.adb =================================================================== --- sem_ch3.adb (revision 178438) +++ sem_ch3.adb (working copy) @@ -9105,9 +9105,16 @@ begin E := Subp; while Present (Alias (E)) loop - Error_Msg_Sloc := Sloc (E); - Error_Msg_NE - ("\& has been inherited #", T, Subp); + + -- Avoid reporting redundant errors on entities + -- inherited from interfaces + + if Sloc (E) /= Sloc (T) then + Error_Msg_Sloc := Sloc (E); + Error_Msg_NE + ("\& has been inherited #", T, Subp); + end if; + E := Alias (E); end loop;