re PR tree-optimization/89135 (internal compiler error: in gimple_split_edge, at tree-cfg.c:2747)
2019-01-31 Richard Biener <rguenther@suse.de> PR tree-optimization/89135 * tree-ssa-phiprop.c (pass_phiprop::execute): Skip blocks with abnormal preds. * gcc.dg/torture/pr89135.c: New testcase. From-SVN: r268417
This commit is contained in:
parent
6206a883fe
commit
7ad97d1777
@ -1,3 +1,9 @@
|
||||
2019-01-31 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/89135
|
||||
* tree-ssa-phiprop.c (pass_phiprop::execute): Skip blocks
|
||||
with abnormal preds.
|
||||
|
||||
2019-01-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/89124
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-01-31 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/89135
|
||||
* gcc.dg/torture/pr89135.c: New testcase.
|
||||
|
||||
2019-01-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/89124
|
||||
|
33
gcc/testsuite/gcc.dg/torture/pr89135.c
Normal file
33
gcc/testsuite/gcc.dg/torture/pr89135.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef __INTPTR_TYPE__ intptr_t;
|
||||
intptr_t a, b, c, d;
|
||||
int foo (void) { return 0; }
|
||||
int baz (void);
|
||||
|
||||
void
|
||||
bar (void)
|
||||
{
|
||||
intptr_t g = (intptr_t) &&h;
|
||||
void *i = &&j, *k = &&l;
|
||||
j:
|
||||
if (baz ())
|
||||
{
|
||||
intptr_t **n = (intptr_t **) &a;
|
||||
l:
|
||||
b = 0;
|
||||
for (; b >= 0;)
|
||||
goto *k;
|
||||
h:
|
||||
**n = 0;
|
||||
for (;;)
|
||||
{
|
||||
intptr_t *o = &c;
|
||||
g = foo ();
|
||||
*o = g;
|
||||
if (c)
|
||||
goto *d;
|
||||
}
|
||||
}
|
||||
goto *i;
|
||||
}
|
@ -495,8 +495,14 @@ pass_phiprop::execute (function *fun)
|
||||
bbs = get_all_dominated_blocks (CDI_DOMINATORS,
|
||||
single_succ (ENTRY_BLOCK_PTR_FOR_FN (fun)));
|
||||
FOR_EACH_VEC_ELT (bbs, i, bb)
|
||||
for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
did_something |= propagate_with_phi (bb, gsi.phi (), phivn, n);
|
||||
{
|
||||
/* Since we're going to move dereferences across predecessor
|
||||
edges avoid blocks with abnormal predecessors. */
|
||||
if (bb_has_abnormal_pred (bb))
|
||||
continue;
|
||||
for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
did_something |= propagate_with_phi (bb, gsi.phi (), phivn, n);
|
||||
}
|
||||
|
||||
if (did_something)
|
||||
gsi_commit_edge_inserts ();
|
||||
|
Loading…
Reference in New Issue
Block a user