https://gcc.gnu.org/g:480819c921ed656ace16c5359aaa2d9abdc73ba5
commit r15-2832-g480819c921ed656ace16c5359aaa2d9abdc73ba5 Author: Steve Baird <[email protected]> Date: Tue Jul 30 13:48:39 2024 -0700 ada: Etype missing for raise expression 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. Diff: --- gcc/ada/exp_ch4.adb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 18ec7125cc1e..106305f46362 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -443,8 +443,11 @@ package body Exp_Ch4 is 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
