diff options
author | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-15 22:03:09 +0000 |
---|---|---|
committer | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-15 22:03:09 +0000 |
commit | fabc1fc908262e3106beb0c472fa4da03b792680 (patch) | |
tree | 9cb27b789683b1330655a5c58c75ef45724a2ba9 /gcc | |
parent | 7c1a227e939a117df96b4a092d8e42c22de8f1ba (diff) | |
download | gcc-fabc1fc908262e3106beb0c472fa4da03b792680.tar.gz |
2010-05-15 Janus Weil <janus@gcc.gnu.org>
PR fortran/44154
PR fortran/42647
* trans-decl.c (gfc_trans_deferred_vars): Modify ordering of
if branches.
2010-05-15 Janus Weil <janus@gcc.gnu.org>
PR fortran/44154
PR fortran/42647
* gfortran.dg/allocatable_scalar_9.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159445 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocatable_scalar_9.f90 | 51 |
4 files changed, 66 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index dd6d23fcd7d..2b2bc9bfb57 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,12 @@ 2010-05-15 Janus Weil <janus@gcc.gnu.org> + PR fortran/44154 + PR fortran/42647 + * trans-decl.c (gfc_trans_deferred_vars): Modify ordering of + if branches. + +2010-05-15 Janus Weil <janus@gcc.gnu.org> + PR fortran/43207 PR fortran/43969 * gfortran.h (gfc_class_null_initializer): New prototype. diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 4f0256ae87b..56c88bc69f8 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3259,8 +3259,6 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, tree fnbody) if (sym_has_alloc_comp && !seen_trans_deferred_array) fnbody = gfc_trans_deferred_array (sym, fnbody); } - else if (sym_has_alloc_comp) - fnbody = gfc_trans_deferred_array (sym, fnbody); else if (sym->attr.allocatable || (sym->ts.type == BT_CLASS && sym->ts.u.derived->components->attr.allocatable)) @@ -3298,6 +3296,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, tree fnbody) fnbody = gfc_finish_block (&block); } } + else if (sym_has_alloc_comp) + fnbody = gfc_trans_deferred_array (sym, fnbody); else if (sym->ts.type == BT_CHARACTER) { gfc_get_backend_locus (&loc); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b41cfacc2de..ded582b1968 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-05-15 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44154 + PR fortran/42647 + * gfortran.dg/allocatable_scalar_9.f90: New. + 2010-05-15 Jakub Jelinek <jakub@redhat.com> PR c++/44148 diff --git a/gcc/testsuite/gfortran.dg/allocatable_scalar_9.f90 b/gcc/testsuite/gfortran.dg/allocatable_scalar_9.f90 new file mode 100644 index 00000000000..56e5a7089fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocatable_scalar_9.f90 @@ -0,0 +1,51 @@ +! { dg-do run } +! +! PR 42647: Missed initialization/dealloc of allocatable scalar DT with allocatable component +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> + +module m +type st + integer , allocatable :: a1 +end type st +type at + integer , allocatable :: a2(:) +end type at + +type t1 + type(st), allocatable :: b1 +end type t1 +type t2 + type(st), allocatable :: b2(:) +end type t2 +type t3 + type(at), allocatable :: b3 +end type t3 +type t4 + type(at), allocatable :: b4(:) +end type t4 +end module m + +use m +type(t1) :: na1, a1, aa1(:) +type(t2) :: na2, a2, aa2(:) +type(t3) :: na3, a3, aa3(:) +type(t4) :: na4, a4, aa4(:) +allocatable :: a1, a2, a3, a4, aa1, aa2, aa3,aa4 + +if(allocated(a1)) call abort() +if(allocated(a2)) call abort() +if(allocated(a3)) call abort() +if(allocated(a4)) call abort() +if(allocated(aa1)) call abort() +if(allocated(aa2)) call abort() +if(allocated(aa3)) call abort() +if(allocated(aa4)) call abort() + +if(allocated(na1%b1)) call abort() +if(allocated(na2%b2)) call abort() +if(allocated(na3%b3)) call abort() +if(allocated(na4%b4)) call abort() +end + +! { dg-final { cleanup-modules "m" } } |