From: Gary Dismukes Date: Sun, 5 Jul 2020 17:29:02 +0000 (-0400) Subject: [Ada] AI12-0170: Abstract subprogram calls in class-wide precond exprs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c95f21001dc9b7dbe717ef84924220192c7b48ae;p=gcc.git [Ada] AI12-0170: Abstract subprogram calls in class-wide precond exprs gcc/ada/ * sem_disp.adb (Check_Dispatching_Context): When the enclosing subprogram is abstract, bypass early return if the call is tag-indeterminate, to continue with the later error checking. --- diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index 67a8cdf6095..cf54337631d 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -575,12 +575,16 @@ package body Sem_Disp is -- Similarly, if this is a pre/postcondition for an abstract -- subprogram, it may call another abstract function which is -- a primitive of an abstract type. The call is non-dispatching - -- but will be legal in overridings of the operation. + -- but will be legal in overridings of the operation. However, + -- if the call is tag-indeterminate we want to continue with + -- with the error checking below, as this case is illegal even + -- for abstract subprograms (see AI12-0170). elsif (Is_Subprogram (Scop) or else Chars (Scop) = Name_Postcondition) and then - (Is_Abstract_Subprogram (Scop) + ((Is_Abstract_Subprogram (Scop) + and then not Is_Tag_Indeterminate (N)) or else (Nkind (Parent (Scop)) = N_Procedure_Specification and then Null_Present (Parent (Scop))))