If the primitive equality operator of the component type of an array type is
abstract, then a call to that abstract function raises Program_Error (when
such a call is legal). The FE generates a raise expression to implement this.
That raise expression is an expression so it should have a valid Etype.
gcc/ada/
* exp_ch4.adb (Build_Eq_Call): In the abstract callee case, copy
the Etype of the callee onto the Make_Raise_Program_Error result.
begin
if Present (Eq) then
if Is_Abstract_Subprogram (Eq) then
- return Make_Raise_Program_Error (Loc,
- Reason => PE_Explicit_Raise);
+ return Result : constant Node_Id :=
+ Make_Raise_Program_Error (Loc, Reason => PE_Explicit_Raise)
+ do
+ Set_Etype (Result, Etype (Eq));
+ end return;
else
return