diff options
author | Diego Novillo <dnovillo@redhat.com> | 2005-01-27 04:45:20 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@gcc.gnu.org> | 2005-01-26 23:45:20 -0500 |
commit | 87637d21c0eab59ae9ba4ca7b3593fe847cc1bed (patch) | |
tree | 839beaf956bc6b73ae54db4610def572b171b9e0 /gcc/testsuite/gcc.dg/pr19633.c | |
parent | 9ff93eb01ce59be5d7b26428df5e5bf6671bce86 (diff) | |
download | gcc-87637d21c0eab59ae9ba4ca7b3593fe847cc1bed.zip gcc-87637d21c0eab59ae9ba4ca7b3593fe847cc1bed.tar.gz gcc-87637d21c0eab59ae9ba4ca7b3593fe847cc1bed.tar.bz2 |
re PR tree-optimization/19633 (local address incorrectly thought to escape)
PR tree-optimization/19633
* tree-ssa-alias.c (ptr_is_dereferenced_by): Also handle
CALL_EXPRs.
(maybe_create_global_var): Do not create .GLOBAL_VAR if there
are no call-clobbered variables.
* tree-outof-ssa.c (check_replaceable): Return false for calls
with side-effects.
testsuite/ChangeLog
PR tree-optimization/19633
* gcc.dg/pr19633.c: New test.
* gcc.dg/tree-ssa/pr19633.c: New test.
From-SVN: r94311
Diffstat (limited to 'gcc/testsuite/gcc.dg/pr19633.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/pr19633.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pr19633.c b/gcc/testsuite/gcc.dg/pr19633.c new file mode 100644 index 0000000..4e18375 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr19633.c @@ -0,0 +1,40 @@ +/* { dg-do link } */ +/* { dg-options "-O2" } */ + +struct S +{ + int w, x, y, z; +}; + +struct T +{ + int r; + struct S s; +}; + +void +foo (int a, struct T b) +{ + struct S x; + struct S *c = &x; + if (a) + c = &b.s; + b.s.w = 3; + bar (*c, a); + if (b.s.w != 3) + link_error (); +} + +int main () +{ + struct T b; + foo (3, b); + return 0; +} + +int X; + +int bar (struct S x, int i) +{ + X = 3; +} |