re PR tree-optimization/39041 (ICE on valid during vrp2)

2009-01-30  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/39041
	* tree-ssa-forwprop.c (forward_propagate_addr_expr_1):
	Propagate variable indices only if the types match for this stmt.

	* gcc.c-torture/compile/pr39041.c: New testcase.

From-SVN: r143808
This commit is contained in:
Richard Guenther 2009-01-30 22:09:15 +00:00 committed by Richard Biener
parent d0728ae0d8
commit 5f4d82c2ea
4 changed files with 40 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2009-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39041
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1):
Propagate variable indices only if the types match for this stmt.
2009-01-30 Jakub Jelinek <jakub@redhat.com>
PR target/39013

View File

@ -1,3 +1,8 @@
2009-01-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39041
* gcc.c-torture/compile/pr39041.c: New testcase.
2009-01-30 Jakub Jelinek <jakub@redhat.com>
PR target/39013

View File

@ -0,0 +1,28 @@
int test_bit(int nr, void *addr)
{
int *a = (int *)addr;
int mask;
a += nr;
mask = 1 << nr;
return mask & *a;
}
struct {
struct {
int disabled;
} *data[1];
} trace;
struct {
unsigned bits[1];
} cpumask;
void inc(int *);
void dec(int *);
int foo(void)
{
int cpu;
for (cpu = 0; cpu < 1; cpu++) {
if (test_bit(cpu, cpumask.bits))
inc(&trace.data[cpu]->disabled);
if (!test_bit(cpu, cpumask.bits))
dec(&trace.data[cpu]->disabled);
}
}

View File

@ -845,6 +845,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
array elements, then the result is converted into the proper
type for the arithmetic. */
if (TREE_CODE (rhs2) == SSA_NAME
&& useless_type_conversion_p (TREE_TYPE (name), TREE_TYPE (def_rhs))
/* Avoid problems with IVopts creating PLUS_EXPRs with a
different type than their operands. */
&& useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (def_rhs)))