tree-ssa-operands.c (get_expr_operands): Do not treat malloc attributed functions as pure or const.

* tree-ssa-operands.c (get_expr_operands): Do not treat malloc
	attributed functions as pure or const.

From-SVN: r81951
This commit is contained in:
Steven Bosscher 2004-05-17 21:25:32 +00:00 committed by Steven Bosscher
parent 719df717e2
commit 6944d9ddb0
4 changed files with 33 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2004-05-17 Steven Bosscher <stevenb@suse.de>
* tree-ssa-operands.c (get_expr_operands): Do not treat malloc
attributed functions as pure or const.
2004-05-17 Frank Ch. Eigler <fche@redhat.com>
* tree-mudflap.c (mx_register_decls): Tolerate decl trees resulting

View file

@ -1,3 +1,7 @@
2004-05-17 Steven Bosscher <stevenb@suse.de>
* gcc.dg/tree-ssa/20040517-1.c: New test.
2004-05-15 Andrew Pinski <pinskia@physics.uc.edu>
* gcc.dg/tree-ssa/20040514-1.c: Add '}' that was forgotten.

View file

@ -0,0 +1,20 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-ssa-vops" } */
int a;
extern void __attribute__ ((malloc)) *foo ();
void bar (void)
{
a = 1;
foo ();
if (a)
abort ();
}
/* We used to treat malloc functions like pure and const functions, but
malloc functions may clobber global memory. Only the function result
does not alias any other pointer.
Hence, we must have a VDEF for a before and after the call to foo(). */
/* { dg-final { scan-tree-dump-times "VDEF" 2 "ssa"} } */

View file

@ -1023,12 +1023,11 @@ get_expr_operands (tree stmt, tree *expr_p, int flags, voperands_t prev_vops)
if (bitmap_first_set_bit (call_clobbered_vars) >= 0)
{
/* A 'pure' or a 'const' functions never call clobber anything.
A 'noreturn' function might, but since we don't return anyway
there is no point in recording that. */
if (!(call_flags
& (ECF_PURE
| ECF_CONST
| ECF_NORETURN
| ECF_MALLOC
| ECF_MAY_BE_ALLOCA)))
& (ECF_PURE | ECF_CONST | ECF_NORETURN)))
add_call_clobber_ops (stmt, prev_vops);
else if (!(call_flags & (ECF_CONST | ECF_NORETURN)))
add_call_read_ops (stmt, prev_vops);