This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[tree-ssa] PATCH to get_stmt_operands and non-GIMPLE statements


A statement-level CALL_EXPR marked as non-GIMPLE (as a result of some
forthcoming gimplifier fixes) was causing get_stmt_operands to abort.
Diego suggested this patch.

Tested athlon-pc-linux-gnu, applied to tree-ssa.

2003-08-19  Jason Merrill  <jason@redhat.com>
            Diego Novillo  <dnovillo@redhat.com>

	* tree-dfa.c (get_stmt_operands): Just mark non-GIMPLE statements
	as unmodified.
	(find_referenced_vars): So we don't need to mark them here.

*** ./tree-dfa.c.~1~	Tue Aug 19 14:38:35 2003
--- ./tree-dfa.c	Tue Aug 19 17:07:45 2003
*************** get_stmt_operands (tree stmt)
*** 182,195 ****
    if (!stmt_modified_p (stmt))
      return;
  
- #if defined ENABLE_CHECKING
-   /* non-GIMPLE statements should not appear here.  */
-   if (TREE_NOT_GIMPLE (stmt))
-     abort ();
- #endif
- 
    ann = get_stmt_ann (stmt);
  
    /* Remove any existing operands as they will be scanned again.  */
    ann->ops = NULL;
  
--- 182,196 ----
    if (!stmt_modified_p (stmt))
      return;
  
    ann = get_stmt_ann (stmt);
  
+   /* Non-GIMPLE statements are just marked unmodified.  */
+   if (TREE_NOT_GIMPLE (stmt))
+     {
+       ann->modified = 0;
+       return;
+     }
+ 
    /* Remove any existing operands as they will be scanned again.  */
    ann->ops = NULL;
  
*************** find_referenced_vars (tree fndecl)
*** 1794,1805 ****
  	if (TREE_CODE (*stmt_p) == MODIFY_EXPR
  	    && TREE_CODE (TREE_OPERAND (*stmt_p, 1)) == CALL_EXPR
  	    && TREE_NOT_GIMPLE (TREE_OPERAND (*stmt_p, 1)))
! 	  {
! 	    mark_not_gimple (stmt_p);
! 	    /* Prevent get_stmt_operands() from ever dealing with this
! 	       statement.  */
! 	    unmodify_stmt (*stmt_p);
! 	  }
  
  	/* A CALL_EXPR may also appear inside a RETURN_EXPR.  */
  	if (TREE_CODE (*stmt_p) == RETURN_EXPR)
--- 1795,1801 ----
  	if (TREE_CODE (*stmt_p) == MODIFY_EXPR
  	    && TREE_CODE (TREE_OPERAND (*stmt_p, 1)) == CALL_EXPR
  	    && TREE_NOT_GIMPLE (TREE_OPERAND (*stmt_p, 1)))
! 	  mark_not_gimple (stmt_p);
  
  	/* A CALL_EXPR may also appear inside a RETURN_EXPR.  */
  	if (TREE_CODE (*stmt_p) == RETURN_EXPR)
*************** find_referenced_vars (tree fndecl)
*** 1809,1820 ****
  		&& TREE_CODE (expr) == MODIFY_EXPR
  		&& TREE_CODE (TREE_OPERAND (expr, 1)) == CALL_EXPR
  		&& TREE_NOT_GIMPLE (TREE_OPERAND (expr, 1)))
! 	      {
! 		mark_not_gimple (stmt_p);
! 		/* Prevent get_stmt_operands() from ever dealing with this
! 		   statement.  */
! 		unmodify_stmt (*stmt_p);
! 	      }
  	  }
  
  	if (TREE_NOT_GIMPLE (*stmt_p))
--- 1805,1811 ----
  		&& TREE_CODE (expr) == MODIFY_EXPR
  		&& TREE_CODE (TREE_OPERAND (expr, 1)) == CALL_EXPR
  		&& TREE_NOT_GIMPLE (TREE_OPERAND (expr, 1)))
! 	      mark_not_gimple (stmt_p);
  	  }
  
  	if (TREE_NOT_GIMPLE (*stmt_p))

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]