aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-05-24 01:14:18 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-07-04 07:45:51 +0000
commitbdd5056736b642f0124e6cb26f9c2fd8be028908 (patch)
treef3d73d533b4c8d45a878aca452fdf87d13e00049
parentdf69e326b39dabc34f0c9b31f694079e5fa1343a (diff)
downloadgcc-bdd5056736b642f0124e6cb26f9c2fd8be028908.zip
gcc-bdd5056736b642f0124e6cb26f9c2fd8be028908.tar.gz
gcc-bdd5056736b642f0124e6cb26f9c2fd8be028908.tar.bz2
[Ada] Plug loophole for built-in-place return with limited_with clause
When the result type of a function requiring built-in-place return is only visible through a limited_with clause, the compiled needs to wait for the nonlimited view to be available in order to compute whether the built-in-place return is needed, and this comprises tagging the function with the Returns_By_Ref flag. gcc/ada/ * exp_ch6.adb (Build_In_Place_Formal): Also compute Returns_By_Ref for the function if the extra formals were not built initially.
-rw-r--r--gcc/ada/exp_ch6.adb3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 15a2039..88157b9 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -850,11 +850,12 @@ package body Exp_Ch6 is
-- The return type in the function declaration may have been a limited
-- view, and the extra formals for the function were not generated at
-- that point. At the point of call the full view must be available and
- -- the extra formals can be created.
+ -- the extra formals can be created and Returns_By_Ref computed.
if No (Extra_Formal) then
Create_Extra_Formals (Func);
Extra_Formal := Extra_Formals (Func);
+ Compute_Returns_By_Ref (Func);
end if;
-- We search for a formal with a matching suffix. We can't search