diff options
author | Ben Cheng <bccheng@google.com> | 2013-03-28 11:14:20 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2013-03-28 12:40:33 -0700 |
commit | af0c51ac87ab2a87caa03fa108f0d164987a2764 (patch) | |
tree | 4b8b470f7c5b69642fdab8d0aa1fbc148d02196b /gcc-4.8/gcc/testsuite/gfortran.dg/deferred_type_param_5.f90 | |
parent | d87cae247d39ebf4f5a6bf25c932a14d2fdb9384 (diff) | |
download | toolchain_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.f90 | 51 |
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 |