diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-09 19:31:45 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-09 19:31:45 +0000 |
commit | ba4876390b4cb6b94e4ee64d6646fee7aa43b556 (patch) | |
tree | d0452c9d439eb92c86bdb032f5caa94bb5be505c /gcc | |
parent | df4ae4c4516593909d0074d4ddea3da9c0243fda (diff) | |
download | gcc-ba4876390b4cb6b94e4ee64d6646fee7aa43b556.tar.gz |
PR target/43808
* cfgexpand.c (partition_stack_vars): Call
update_alias_info_with_stack_vars unconditionally.
(update_alias_info_with_stack_vars): Allow unused
unreferenced vars when not optimizing.
* gfortran.dg/pr43808.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166509 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr43808.f90 | 18 |
4 files changed, 36 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dbf4ef6ab1d..d8b25500ba1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-11-09 Jakub Jelinek <jakub@redhat.com> + + PR target/43808 + * cfgexpand.c (partition_stack_vars): Call + update_alias_info_with_stack_vars unconditionally. + (update_alias_info_with_stack_vars): Allow unused + unreferenced vars when not optimizing. + 2010-11-09 Sebastian Pop <sebastian.pop@amd.com> PR tree-optimization/46036 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index c44649e857d..784639d9e65 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -516,9 +516,11 @@ update_alias_info_with_stack_vars (void) unsigned int uid = DECL_PT_UID (decl); /* We should never end up partitioning SSA names (though they may end up on the stack). Neither should we allocate stack - space to something that is unused and thus unreferenced. */ + space to something that is unused and thus unreferenced, except + for -O0 where we are preserving even unreferenced variables. */ gcc_assert (DECL_P (decl) - && referenced_var_lookup (DECL_UID (decl))); + && (!optimize + || referenced_var_lookup (DECL_UID (decl)))); bitmap_set_bit (part, uid); *((bitmap *) pointer_map_insert (decls_to_partitions, (void *)(size_t) uid)) = part; @@ -684,8 +686,7 @@ partition_stack_vars (void) } } - if (optimize) - update_alias_info_with_stack_vars (); + update_alias_info_with_stack_vars (); } /* A debugging aid for expand_used_vars. Dump the generated partitions. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5517521f671..3e451d00c8b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-09 Jakub Jelinek <jakub@redhat.com> + + PR target/43808 + * gfortran.dg/pr43808.f90: New test. + 2010-11-09 Sebastian Pop <sebastian.pop@amd.com> PR tree-optimization/46036 diff --git a/gcc/testsuite/gfortran.dg/pr43808.f90 b/gcc/testsuite/gfortran.dg/pr43808.f90 new file mode 100644 index 00000000000..97de6289286 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr43808.f90 @@ -0,0 +1,18 @@ +! PR target/43808 +! { dg-do run } +! { dg-options "-O0 -fipa-reference -fschedule-insns -fstrict-aliasing" } + + type :: a + integer, allocatable :: i(:) + end type a + type :: b + type (a), allocatable :: j(:) + end type b + type(a) :: x(2) + type(b) :: y(2) + x(1) = a((/1,2,3,4/)) + x(2) = a((/1,2,3,4/)+10) + y(1) = b((/x(1),x(2)/)) + y(2) = b((/x(1),x(2)/)) + if (y(1)%j(1)%i(1) .ne. 1) call abort +end |