re PR tree-optimization/65241 (ICE (in remove_local_expressions_from_table, at tree-ssa-dom.c:1081))
PR tree-optimization/65241 * tree-ssa-dom.c (lookup_avail_expr): Only modify the avail_expr hash table if INSERT is true. PR tree-optimization/65241 * gcc.c-torture/compile/pr65241.c: New test. From-SVN: r221145
This commit is contained in:
parent
5cb8b86ede
commit
2f159d9f86
4 changed files with 52 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-03-23 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/65241
|
||||
* tree-ssa-dom.c (lookup_avail_expr): Only modify the avail_expr
|
||||
hash table if INSERT is true.
|
||||
|
||||
2015-03-03 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR target/65296
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-03-13 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/65241
|
||||
* gcc.c-torture/compile/pr65241.c: New test.
|
||||
|
||||
2015-03-03 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR target/64331
|
||||
|
|
26
gcc/testsuite/gcc.c-torture/compile/pr65241.c
Normal file
26
gcc/testsuite/gcc.c-torture/compile/pr65241.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
enum E { A, B, C, D };
|
||||
void fn4 (void);
|
||||
|
||||
int
|
||||
fn1 (enum E p1)
|
||||
{
|
||||
static int w[D];
|
||||
if (w[p1])
|
||||
switch (p1)
|
||||
case C:
|
||||
w[p1] = 0;
|
||||
}
|
||||
|
||||
void
|
||||
fn2 (p1)
|
||||
{
|
||||
fn1 (p1);
|
||||
}
|
||||
|
||||
void
|
||||
fn3 (enum E p1)
|
||||
{
|
||||
fn2 (p1);
|
||||
fn4 ();
|
||||
fn2 (p1);
|
||||
}
|
|
@ -2649,19 +2649,22 @@ lookup_avail_expr (gimple stmt, bool insert)
|
|||
&& walk_non_aliased_vuses (&ref, vuse2,
|
||||
vuse_eq, NULL, NULL, vuse1) != NULL))
|
||||
{
|
||||
struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt);
|
||||
*element2 = element;
|
||||
element2->stamp = element2;
|
||||
|
||||
/* Insert the expr into the hash by replacing the current
|
||||
entry and recording the value to restore in the
|
||||
aval_exprs_stack. */
|
||||
avail_exprs_stack.safe_push (std::make_pair (element2, *slot));
|
||||
*slot = element2;
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
if (insert)
|
||||
{
|
||||
fprintf (dump_file, "2>>> ");
|
||||
print_expr_hash_elt (dump_file, *slot);
|
||||
struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt);
|
||||
*element2 = element;
|
||||
element2->stamp = element2;
|
||||
|
||||
/* Insert the expr into the hash by replacing the current
|
||||
entry and recording the value to restore in the
|
||||
avail_exprs_stack. */
|
||||
avail_exprs_stack.safe_push (std::make_pair (element2, *slot));
|
||||
*slot = element2;
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
fprintf (dump_file, "2>>> ");
|
||||
print_expr_hash_elt (dump_file, *slot);
|
||||
}
|
||||
}
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue