diff mbox

Invalid gimple for nested functions

Message ID 53FB615A.4070108@codesourcery.com
State New
Headers show

Commit Message

Bernd Schmidt Aug. 25, 2014, 4:16 p.m. UTC
On 08/05/2014 10:54 AM, Richard Biener wrote:
> The better interface for this is gimple_assign_set_rhs_from_tree.  But it
> seems the code can be re-structured to avoid re-setting the RHS by
> simply doing
>
>     if (!is_gimple_reg (x)
>                && is_gimple_reg_type (TREE_TYPE (x))
>      x = init_tmp_var (root, x, &gsi);
>
> right after x is assigned to?
>
> Ok with that change.

That also works, I've committed the following.


Bernd
diff mbox

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f22f09f..c5ef281 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@ 
+2014-08-25  Bernd Schmidt  <bernds@codesourcery.com>
+
+	* tree-nested.c (finalize_nesting_tree_1): Initialize temporary earlier
+	rather than modifying the stmt.
+
 2014-08-25  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
 
 	* config/rs6000/rs6000.c (rs6000_return_in_msb): Fix fallout from
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index 82cec96..6ca594d 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -2715,10 +2715,6 @@  finalize_nesting_tree_1 (struct nesting_info *root)
 	  else
 	    x = p;
 
-	  y = build3 (COMPONENT_REF, TREE_TYPE (field),
-		      root->frame_decl, field, NULL_TREE);
-	  stmt = gimple_build_assign (y, x);
-	  gimple_seq_add_stmt (&stmt_list, stmt);
 	  /* If the assignment is from a non-register the stmt is
 	     not valid gimple.  Make it so by using a temporary instead.  */
 	  if (!is_gimple_reg (x)
@@ -2726,8 +2722,12 @@  finalize_nesting_tree_1 (struct nesting_info *root)
 	    {
 	      gimple_stmt_iterator gsi = gsi_last (stmt_list);
 	      x = init_tmp_var (root, x, &gsi);
-	      gimple_assign_set_rhs1 (stmt, x);
 	    }
+
+	  y = build3 (COMPONENT_REF, TREE_TYPE (field),
+		      root->frame_decl, field, NULL_TREE);
+	  stmt = gimple_build_assign (y, x);
+	  gimple_seq_add_stmt (&stmt_list, stmt);
 	}
     }