From: Eric Botcazou <ebotca...@adacore.com>

gcc/ada/

        * gcc-interface/trans.cc (gnat_to_gnu): Restrict previous change to
        the case where the simple return statement has got no storage pool.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/gcc-interface/trans.cc | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index fd85facaf70..5d93060c6d8 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -8451,8 +8451,8 @@ gnat_to_gnu (Node_Id gnat_node)
 
        5. If this is a reference to an unconstrained array which is used either
          as the prefix of an attribute reference that requires an lvalue or in
-         a return statement, then return the result unmodified because we want
-         to return the original bounds.
+         a return statement without storage pool, return the result unmodified
+         because we want to return the original bounds.
 
        6. Finally, if the type of the result is already correct.  */
 
@@ -8518,7 +8518,8 @@ gnat_to_gnu (Node_Id gnat_node)
           && Present (Parent (gnat_node))
           && ((Nkind (Parent (gnat_node)) == N_Attribute_Reference
                && lvalue_required_for_attribute_p (Parent (gnat_node)))
-              || Nkind (Parent (gnat_node)) == N_Simple_Return_Statement))
+              || (Nkind (Parent (gnat_node)) == N_Simple_Return_Statement
+                  && No (Storage_Pool (gnat_node)))))
     ;
 
   else if (TREE_TYPE (gnu_result) != gnu_result_type)
-- 
2.40.0

Reply via email to