]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Etype missing for raise expression
authorSteve Baird <baird@adacore.com>
Tue, 30 Jul 2024 20:48:39 +0000 (13:48 -0700)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 8 Aug 2024 14:28:29 +0000 (16:28 +0200)
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.

gcc/ada/exp_ch4.adb

index 18ec7125cc1e0927d13e730a8b31db3b9a9f4e3a..106305f463625e8a8bafc498b57d118a8decef8b 100644 (file)
@@ -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