OSDN Git Service

2010-07-22 Daniel Kraft <d@domob.eu>
authordomob <domob@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Jul 2010 10:59:31 +0000 (10:59 +0000)
committerdomob <domob@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Jul 2010 10:59:31 +0000 (10:59 +0000)
* trans-stmt.c (gfc_trans_return): Put back in the handling of se.post,
now in the correct place.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162409 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-stmt.c

index 1b3f555..ee2566d 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-22  Daniel Kraft  <d@domob.eu>
+
+       * trans-stmt.c (gfc_trans_return): Put back in the handling of se.post,
+       now in the correct place.
+
 2010-07-21  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/44929
index 8abdd88..019555a 100644 (file)
@@ -517,9 +517,13 @@ gfc_trans_return (gfc_code * code)
 
       gfc_conv_expr (&se, code->expr1);
 
+      /* Note that the actually returned expression is a simple value and
+        does not depend on any pointers or such; thus we can clean-up with
+        se.post before returning.  */
       tmp = fold_build2 (MODIFY_EXPR, TREE_TYPE (result), result,
                         fold_convert (TREE_TYPE (result), se.expr));
       gfc_add_expr_to_block (&se.pre, tmp);
+      gfc_add_block_to_block (&se.pre, &se.post);
 
       tmp = gfc_generate_return ();
       gfc_add_expr_to_block (&se.pre, tmp);