From d0cfec1c6b2758271f53b0d325cfa5954363fc17 Mon Sep 17 00:00:00 2001 From: burnus Date: Wed, 30 Jan 2013 07:47:14 +0000 Subject: [PATCH] 2012-01-30 Tobias Burnus PR fortran/56138 * trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length results for functions without extra result variable. 2012-01-30 Tobias Burnus PR fortran/56138 * gfortran.dg/allocatable_function_6.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195570 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/trans-decl.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ .../gfortran.dg/allocatable_function_6.f90 | 22 +++++++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/allocatable_function_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6a42ba45c32d..bef16a526247 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2012-01-30 Tobias Burnus + + PR fortran/56138 + * trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length + results for functions without extra result variable. + 2013-01-29 Janus Weil Mikael Morin diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 1d0919dd4c1f..77324408eb7f 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3775,7 +3775,7 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) null_pointer_node)); } - if ((sym->attr.dummy ||sym->attr.result) + if ((sym->attr.dummy || sym->attr.result || sym->result == sym) && sym->ts.type == BT_CHARACTER && sym->ts.deferred) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 761d60160346..d4b666fdf45c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-30 Tobias Burnus + + PR fortran/56138 + * gfortran.dg/allocatable_function_6.f90: New. + 2013-01-29 Janus Weil Mikael Morin diff --git a/gcc/testsuite/gfortran.dg/allocatable_function_6.f90 b/gcc/testsuite/gfortran.dg/allocatable_function_6.f90 new file mode 100644 index 000000000000..3af68cc182b6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocatable_function_6.f90 @@ -0,0 +1,22 @@ +! { dg-do run } +! +! PR fortran/56138 +! +! Contributed by John Chludzinski, using the code of John Reid +! +implicit none +CHARACTER(LEN=:),ALLOCATABLE :: str +if (s_to_c("ABCdef") /= "ABCdef" .or. len(s_to_c("ABCdef")) /= 6) call abort() +str = s_to_c("ABCdef") +if (str /= "ABCdef" .or. len(str) /= 6) call abort() +str(1:3) = s_to_c("123") +if (str /= "123def" .or. len(str) /= 6) call abort() + +contains + +PURE FUNCTION s_to_c(string) + CHARACTER(LEN=*),INTENT(IN) :: string + CHARACTER(LEN=:),ALLOCATABLE :: s_to_c + s_to_c = string +ENDFUNCTION s_to_c +end -- 2.47.2