[Ada] Avoid premature finalization of a function result
authorSteve Baird <baird@adacore.com>
Fri, 26 Jun 2020 00:15:50 +0000 (17:15 -0700)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 16 Oct 2020 07:31:31 +0000 (03:31 -0400)
gcc/ada/

* exp_util.adb (Is_Related_To_Func_Return): Cope with the case
where the FE introduces a type conversion.

gcc/ada/exp_util.adb

index 8ef05d4d3722deef88dc1b93f52c49b9967b7376..269c9e05f50929cf8eef17cc7e5ad5bfe9262fb5 100644 (file)
@@ -8740,9 +8740,14 @@ package body Exp_Util is
    function Is_Related_To_Func_Return (Id : Entity_Id) return Boolean is
       Expr : constant Node_Id := Related_Expression (Id);
    begin
+      --  In the case of a function with a class-wide result that returns
+      --  a call to a function with a specific result, we introduce a
+      --  type conversion for the return expression. We do not want that
+      --  type conversion to influence the result of this function.
+
       return
         Present (Expr)
-          and then Nkind (Expr) = N_Explicit_Dereference
+          and then Nkind (Unqual_Conv (Expr)) = N_Explicit_Dereference
           and then Nkind (Parent (Expr)) = N_Simple_Return_Statement;
    end Is_Related_To_Func_Return;