Commit 2a900079 by Richard Biener Committed by Richard Biener

re PR tree-optimization/82264 (ICE in vn_phi_lookup at gcc/tree-ssa-sccvn.c:3125)

2017-09-20  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82264
	* tree-ssa-sccvn.c (vn_phi_eq): Use safe_dyn_cast to check
	for GIMPLE_CONDs.
	(vn_phi_lookup): Likewise.
	(vn_phi_insert): Likewise.

	* gcc.dg/torture/pr82264.c: New testcase.

From-SVN: r253005
parent 88272c01
2017-09-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/82264
* tree-ssa-sccvn.c (vn_phi_eq): Use safe_dyn_cast to check
for GIMPLE_CONDs.
(vn_phi_lookup): Likewise.
(vn_phi_insert): Likewise.
2017-09-20 Jakub Jelinek <jakub@redhat.com> 2017-09-20 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (tree_add_const_value_attribute): For INTEGER_CST * dwarf2out.c (tree_add_const_value_attribute): For INTEGER_CST
......
2017-09-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/82264
* gcc.dg/torture/pr82264.c: New testcase.
2017-09-20 Jakub Jelinek <jakub@redhat.com> 2017-09-20 Jakub Jelinek <jakub@redhat.com>
* g++.dg/debug/dwarf2/template-params-13.C: New test. * g++.dg/debug/dwarf2/template-params-13.C: New test.
......
/* { dg-do compile } */
char a;
int c;
unsigned b ();
unsigned
setjmp ()
{
}
static void
d ()
{
if (b ())
c = 3;
}
void
e ()
{
d ();
a && ({ setjmp (); });
}
...@@ -3028,16 +3028,13 @@ vn_phi_eq (const_vn_phi_t const vp1, const_vn_phi_t const vp2) ...@@ -3028,16 +3028,13 @@ vn_phi_eq (const_vn_phi_t const vp1, const_vn_phi_t const vp2)
return false; return false;
/* Verify the controlling stmt is the same. */ /* Verify the controlling stmt is the same. */
gimple *last1 = last_stmt (idom1); gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1));
gimple *last2 = last_stmt (idom2); gcond *last2 = safe_dyn_cast <gcond *> (last_stmt (idom2));
if (gimple_code (last1) != GIMPLE_COND if (! last1 || ! last2)
|| gimple_code (last2) != GIMPLE_COND)
return false; return false;
bool inverted_p; bool inverted_p;
if (! cond_stmts_equal_p (as_a <gcond *> (last1), if (! cond_stmts_equal_p (last1, vp1->cclhs, vp1->ccrhs,
vp1->cclhs, vp1->ccrhs, last2, vp2->cclhs, vp2->ccrhs,
as_a <gcond *> (last2),
vp2->cclhs, vp2->ccrhs,
&inverted_p)) &inverted_p))
return false; return false;
...@@ -3122,7 +3119,7 @@ vn_phi_lookup (gimple *phi) ...@@ -3122,7 +3119,7 @@ vn_phi_lookup (gimple *phi)
vp1.ccrhs = NULL_TREE; vp1.ccrhs = NULL_TREE;
basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1.block); basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1.block);
if (EDGE_COUNT (idom1->succs) == 2) if (EDGE_COUNT (idom1->succs) == 2)
if (gcond *last1 = dyn_cast <gcond *> (last_stmt (idom1))) if (gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1)))
{ {
vp1.cclhs = vn_valueize (gimple_cond_lhs (last1)); vp1.cclhs = vn_valueize (gimple_cond_lhs (last1));
vp1.ccrhs = vn_valueize (gimple_cond_rhs (last1)); vp1.ccrhs = vn_valueize (gimple_cond_rhs (last1));
...@@ -3168,7 +3165,7 @@ vn_phi_insert (gimple *phi, tree result) ...@@ -3168,7 +3165,7 @@ vn_phi_insert (gimple *phi, tree result)
vp1->ccrhs = NULL_TREE; vp1->ccrhs = NULL_TREE;
basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1->block); basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1->block);
if (EDGE_COUNT (idom1->succs) == 2) if (EDGE_COUNT (idom1->succs) == 2)
if (gcond *last1 = dyn_cast <gcond *> (last_stmt (idom1))) if (gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1)))
{ {
vp1->cclhs = vn_valueize (gimple_cond_lhs (last1)); vp1->cclhs = vn_valueize (gimple_cond_lhs (last1));
vp1->ccrhs = vn_valueize (gimple_cond_rhs (last1)); vp1->ccrhs = vn_valueize (gimple_cond_rhs (last1));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment