re PR tree-optimization/58978 (ICE: Segmentation fault)

PR tree-optimization/58978
	* tree-vrp.c (all_imm_uses_in_stmt_or_feed_cond): Don't modify
	use_stmt by single_imm_use directly.  Only call single_imm_use
	on SSA_NAMEs.

	* gcc.c-torture/compile/pr58978.c: New test.

From-SVN: r204357
This commit is contained in:
Jakub Jelinek 2013-11-04 21:17:17 +01:00 committed by Jakub Jelinek
parent 4ca469cf46
commit 7e8c8abc99
4 changed files with 32 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2013-11-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/58978
* tree-vrp.c (all_imm_uses_in_stmt_or_feed_cond): Don't modify
use_stmt by single_imm_use directly. Only call single_imm_use
on SSA_NAMEs.
2013-11-04 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58968

View File

@ -1,3 +1,8 @@
2013-11-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/58978
* gcc.c-torture/compile/pr58978.c: New test.
2013-11-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/57445

View File

@ -0,0 +1,16 @@
/* PR tree-optimization/58978 */
int
foo (int x)
{
switch (x)
{
case 0:
case 1:
case 9:
break;
default:
__builtin_unreachable ();
}
return x;
}

View File

@ -6472,13 +6472,14 @@ all_imm_uses_in_stmt_or_feed_cond (tree var, gimple stmt, basic_block cond_bb)
FOR_EACH_IMM_USE_FAST (use_p, iter, var)
if (USE_STMT (use_p) != stmt)
{
gimple use_stmt = USE_STMT (use_p);
gimple use_stmt = USE_STMT (use_p), use_stmt2;
if (is_gimple_debug (use_stmt))
continue;
while (is_gimple_assign (use_stmt)
&& TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
&& single_imm_use (gimple_assign_lhs (use_stmt),
&use2_p, &use_stmt))
;
&use2_p, &use_stmt2))
use_stmt = use_stmt2;
if (gimple_code (use_stmt) != GIMPLE_COND
|| gimple_bb (use_stmt) != cond_bb)
return false;