Commit 52c307ba by Richard Guenther Committed by Richard Biener

re PR tree-optimization/43879 (-fipa-pta causes various miscompilations)

2010-05-02  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/43879
	* tree-tailcall.c (find_tail_calls): Clobbers also prevent
	tail calls.

	* gcc.dg/torture/pr43879-3.c: New testcase.

From-SVN: r158977
parent d52e74b2
2010-05-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43879
* tree-tailcall.c (find_tail_calls): Clobbers also prevent
tail calls.
2010-05-02 Bruno Haible <bruno@clisp.org>
* doc/extend.texi (Function Attributes): Fix a typo.
......
2010-05-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43879
* gcc.dg/torture/pr43879-3.c: New testcase.
2010-05-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43949
......
/* { dg-do run } */
/* { dg-options "-fipa-pta" } */
typedef unsigned long ulong;
int __attribute__((noinline, noclone))
f4 (int a, int b, int c, int d, int e)
{
return a + b + c + d + e;
}
void __attribute__((noinline, noclone))
f3 (int *p)
{
*p = f4(1, 2, 3, 4, 5);
}
void __attribute__((noinline, noclone))
f2 ()
{
int unused;
f3 (&unused);
}
void __attribute__((noinline, noclone))
f1 (ulong e, ulong f)
{
if (e > 5 || f > 5) __builtin_abort();
f2 ();
}
int main()
{
ulong e, f;
for (e = 5; e > 0; e--)
for (f = 5; f > 0; f--)
f1(e, f);
return 0;
}
......@@ -460,7 +460,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret)
{
if (TREE_CODE (var) != PARM_DECL
&& auto_var_in_fn_p (var, cfun->decl)
&& ref_maybe_used_by_stmt_p (call, var))
&& (ref_maybe_used_by_stmt_p (call, var)
|| call_may_clobber_ref_p (call, var)))
return;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment