re PR middle-end/51071 (ICE in gimple_has_side_effects, at gimple.c:2513)

2011-11-10  Richard Guenther  <rguenther@suse.de>

	PR middle-end/51071
	* gimple.c (gimple_has_side_effects): Remove checking code
	that doesn't belong here.

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

From-SVN: r181253
This commit is contained in:
Richard Guenther 2011-11-10 12:22:46 +00:00 committed by Richard Biener
parent 08d603d6ed
commit 723afc4436
4 changed files with 48 additions and 38 deletions

View file

@ -1,3 +1,9 @@
2011-11-10 Richard Guenther <rguenther@suse.de>
PR middle-end/51071
* gimple.c (gimple_has_side_effects): Remove checking code
that doesn't belong here.
2011-11-10 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/51058

View file

@ -2457,8 +2457,6 @@ gimple_set_modified (gimple s, bool modifiedp)
bool
gimple_has_side_effects (const_gimple s)
{
unsigned i;
if (is_gimple_debug (s))
return false;
@ -2474,47 +2472,15 @@ gimple_has_side_effects (const_gimple s)
if (is_gimple_call (s))
{
unsigned nargs = gimple_call_num_args (s);
tree fn;
int flags = gimple_call_flags (s);
if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
return true;
else if (gimple_call_flags (s) & ECF_LOOPING_CONST_OR_PURE)
/* An infinite loop is considered a side effect. */
if (!(flags & (ECF_CONST | ECF_PURE))
|| (flags & ECF_LOOPING_CONST_OR_PURE))
return true;
if (gimple_call_lhs (s)
&& TREE_SIDE_EFFECTS (gimple_call_lhs (s)))
{
gcc_checking_assert (gimple_has_volatile_ops (s));
return true;
}
fn = gimple_call_fn (s);
if (fn && TREE_SIDE_EFFECTS (fn))
return true;
for (i = 0; i < nargs; i++)
if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i)))
{
gcc_checking_assert (gimple_has_volatile_ops (s));
return true;
}
return false;
}
else
{
for (i = 0; i < gimple_num_ops (s); i++)
{
tree op = gimple_op (s, i);
if (op && TREE_SIDE_EFFECTS (op))
{
gcc_checking_assert (gimple_has_volatile_ops (s));
return true;
}
}
}
return false;
}

View file

@ -1,3 +1,8 @@
2011-11-10 Richard Guenther <rguenther@suse.de>
PR middle-end/51071
* gcc.dg/torture/pr51071.c: New testcase.
2011-11-10 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/loop_optimization9.ad[sb]: New test.

View file

@ -0,0 +1,33 @@
/* { dg-do compile } */
void foo (void);
void bar (void *);
extern int t;
static void kmalloc_large (int size, int flags)
{
(void) size;
(void) flags;
foo ();
bar (({__here:&&__here;}));
}
static void kmalloc (int size, int flags)
{
if (size)
{
if ((unsigned long) size > 0x1000)
kmalloc_large (size, flags);
if (flags)
bar (({__here:&&__here;}));
}
}
void compress_file_range (int i, int j, int k)
{
int nr_pages = ({j < k;});
if (i || t)
kmalloc (0x1000UL * nr_pages, 0x40UL);
}