aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2013-03-28 11:14:20 -0700
committerBen Cheng <bccheng@google.com>2013-03-28 12:40:33 -0700
commitaf0c51ac87ab2a87caa03fa108f0d164987a2764 (patch)
tree4b8b470f7c5b69642fdab8d0aa1fbc148d02196b /gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90
parentd87cae247d39ebf4f5a6bf25c932a14d2fdb9384 (diff)
downloadtoolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.tar.gz
toolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.tar.bz2
toolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.zip
[GCC 4.8] Initial check-in of GCC 4.8.0
Change-Id: I0719d8a6d0f69b367a6ab6f10eb75622dbf12771
Diffstat (limited to 'gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90')
-rw-r--r--gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f9051
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90
new file mode 100644
index 000000000..8380b9d2d
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90
@@ -0,0 +1,51 @@
+! { dg-do compile }
+!
+! PR fortran/49110
+! PR fortran/52843
+!
+! Based on a contributed code by jwmwalrus@gmail.com
+!
+! Before, character(len=:) result variable were rejected in PURE functions.
+!
+module mod1
+ use iso_c_binding
+ implicit none
+
+contains
+ pure function c_strlen(str)
+ character(KIND = C_CHAR), intent(IN) :: str(*)
+ integer :: c_strlen,i
+
+ i = 1
+ do
+ if (i < 1) then
+ c_strlen = 0
+ return
+ end if
+ if (str(i) == c_null_char) exit
+ i = i + 1
+ end do
+ c_strlen = i - 1
+ end function c_strlen
+ pure function c2fstring(cbuffer) result(string)
+ character(:), allocatable :: string
+ character(KIND = C_CHAR), intent(IN) :: cbuffer(*)
+ integer :: i
+
+ continue
+ string = REPEAT(' ', c_strlen(cbuffer))
+
+ do i = 1, c_strlen(cbuffer)
+ if (cbuffer(i) == C_NULL_CHAR) exit
+ string(i:i) = cbuffer(i)
+ enddo
+
+ string = TRIM(string)
+ end function
+end module mod1
+
+use mod1
+character(len=:), allocatable :: str
+str = c2fstring("ABCDEF"//c_null_char//"GHI")
+if (len(str) /= 6 .or. str /= "ABCDEF") call abort()
+end