From 456dd7d66ab1e45b37003ce50296274afc532338 Mon Sep 17 00:00:00 2001 From: burnus Date: Sun, 23 Jan 2011 22:26:27 +0000 Subject: [PATCH] 2011-01-23 Tobias Burnus PR fortran/47421 * trans-decl.c (gfc_trans_deferred_vars): Do not nullify scalar allocatable dummy arguments. 2011-01-23 Tobias Burnus PR fortran/47421 * gfortran.dg/allocatable_scalar_12.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@169145 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/trans-decl.c | 7 ++--- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/allocatable_scalar_12.f90 | 30 ++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/allocatable_scalar_12.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e918ef5b929..489cacad291 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2011-01-23 Tobias Burnus + + PR fortran/47421 + * trans-decl.c (gfc_trans_deferred_vars): Do not nullify + scalar allocatable dummy arguments. + 2011-01-22 Thomas Koenig PR fortran/38536 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 254db76b0c5..5e3afbe8219 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3304,9 +3304,10 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) if (sym_has_alloc_comp && !seen_trans_deferred_array) gfc_trans_deferred_array (sym, block); } - else if (sym->attr.allocatable - || (sym->ts.type == BT_CLASS - && CLASS_DATA (sym)->attr.allocatable)) + else if (!sym->attr.dummy + && (sym->attr.allocatable + || (sym->ts.type == BT_CLASS + && CLASS_DATA (sym)->attr.allocatable))) { if (!sym->attr.save) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c4cc1e08927..71825be5ae6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-01-23 Tobias Burnus + + PR fortran/47421 + * gfortran.dg/allocatable_scalar_12.f90: New. + 2011-01-23 Ira Rosen * gcc.dg/vect/costmodel/spu/costmodel-vect-33.c: Expect diff --git a/gcc/testsuite/gfortran.dg/allocatable_scalar_12.f90 b/gcc/testsuite/gfortran.dg/allocatable_scalar_12.f90 new file mode 100644 index 00000000000..eade363ea95 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocatable_scalar_12.f90 @@ -0,0 +1,30 @@ +! { dg-do run } +! +! PR fortran/47421 +! +! Don't auto-deallocatable scalar character allocatables. +! +implicit none +character(len=5), allocatable :: str +allocate(str) +str = '1bcde' +if(str /= '1bcde') call abort() +call sub(str,len(str)) +if(str /= '1bcde') call abort() +call subOUT(str,len(str)) +if (len(str) /= 5) call abort() +if(allocated(str)) call abort() +contains + subroutine sub(x,n) + integer :: n + character(len=n), allocatable :: x + if(len(x) /= 5) call abort() + if(x /= '1bcde') call abort() + end subroutine sub + subroutine subOUT(x,n) + integer :: n + character(len=n), allocatable,intent(out) :: x + if(allocated(x)) call abort() + if(len(x) /= 5) call abort() + end subroutine subOUT +end -- 2.11.0