summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/realloc_on_assign_4.f03
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/realloc_on_assign_4.f03')
-rw-r--r--gcc/testsuite/gfortran.dg/realloc_on_assign_4.f0350
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_4.f03 b/gcc/testsuite/gfortran.dg/realloc_on_assign_4.f03
new file mode 100644
index 000000000..a71f5d59b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_4.f03
@@ -0,0 +1,50 @@
+! { dg-do run }
+! Tests function return of deferred length scalars.
+!
+! Contributed by Paul Thomas <pault@gcc.gnu.org>
+!
+module m
+contains
+ function mfoo (carg) result(res)
+ character (:), allocatable :: res
+ character (*) :: carg
+ res = carg(2:4)
+ end function
+ function mbar (carg)
+ character (:), allocatable :: mbar
+ character (*) :: carg
+ mbar = carg(2:13)
+ end function
+end module
+
+ use m
+ character (:), allocatable :: lhs
+ lhs = foo ("foo calling ")
+ if (lhs .ne. "foo") call abort
+ if (len (lhs) .ne. 3) call abort
+ deallocate (lhs)
+ lhs = bar ("bar calling - baaaa!")
+ if (lhs .ne. "bar calling") call abort
+ if (len (lhs) .ne. 12) call abort
+ deallocate (lhs)
+ lhs = mfoo ("mfoo calling ")
+ if (lhs .ne. "foo") call abort
+ if (len (lhs) .ne. 3) call abort
+ deallocate (lhs)
+ lhs = mbar ("mbar calling - baaaa!")
+ if (lhs .ne. "bar calling") call abort
+ if (len (lhs) .ne. 12) call abort
+contains
+ function foo (carg) result(res)
+ character (:), allocatable :: res
+ character (*) :: carg
+ res = carg(1:3)
+ end function
+ function bar (carg)
+ character (:), allocatable :: bar
+ character (*) :: carg
+ bar = carg(1:12)
+ end function
+end
+
+