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:
parent
719df717e2
commit
6944d9ddb0
4 changed files with 33 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
20
gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
Normal file
20
gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
Normal 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"} } */
|
||||
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue