]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2012-01-30 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Jan 2013 07:47:14 +0000 (07:47 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Jan 2013 07:47:14 +0000 (07:47 +0000)
        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  <burnus@net-b.de>

        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
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocatable_function_6.f90 [new file with mode: 0644]

index 6a42ba45c32d5285c4fad513fc2a4021f59e8a02..bef16a5262479ddba5b3acc65f2c8d1ab9fa07bf 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-30  Tobias Burnus  <burnus@net-b.de>
+
+       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  <janus@gcc.gnu.org>
            Mikael Morin <mikael@gcc.gnu.org>
 
index 1d0919dd4c1fdcc32e3785f8d53c9f8e5e5a24f9..77324408eb7fef9548da635c3a2c81854dc0b477 100644 (file)
@@ -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)
                {
index 761d601603468be08d1823e4d2492e90a6ddaa82..d4b666fdf45ce30e7bfeef411c93eb29270d3b2a 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-30  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56138
+       * gfortran.dg/allocatable_function_6.f90: New.
+
 2013-01-29  Janus Weil  <janus@gcc.gnu.org>
            Mikael Morin <mikael@gcc.gnu.org>
 
diff --git a/gcc/testsuite/gfortran.dg/allocatable_function_6.f90 b/gcc/testsuite/gfortran.dg/allocatable_function_6.f90
new file mode 100644 (file)
index 0000000..3af68cc
--- /dev/null
@@ -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