mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
88272c0194
commit
2a9000795c
|
|
@ -1,3 +1,11 @@
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
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.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* { 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)
|
||||||
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)
|
||||||
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)
|
||||||
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));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue