summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/char_result_11.f90
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gfortran.dg/char_result_11.f90
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gfortran.dg/char_result_11.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/char_result_11.f90117
1 files changed, 117 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/char_result_11.f90 b/gcc/testsuite/gfortran.dg/char_result_11.f90
new file mode 100644
index 000000000..75e68f1ef
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/char_result_11.f90
@@ -0,0 +1,117 @@
+! { dg-do link }
+! PR 23675: Character function of module-variable length
+! PR 25716: Implicit kind conversions in in expressions written to *.mod-files.
+module cutils
+
+ implicit none
+ private
+
+ type t
+ integer :: k = 25
+ integer :: kk(3) = (/30, 40, 50 /)
+ end type t
+
+ integer :: m1 = 25, m2 = 25, m3 = 25, m4 = 25, m5 = 25
+ integer :: n5 = 3, n7 = 3, n9 = 3
+ integer(1) :: n1 = 3, n2 = 3, n3 = 3, n4 = 3, n6 = 3, n8 = 3
+ character(10) :: s = "abcdefghij"
+ integer :: x(4) = (/ 30, 40, 50, 60 /)
+ type(t), save :: tt1(5), tt2(5)
+
+ public :: IntToChar1, IntToChar2, IntToChar3, IntToChar4, IntToChar5, &
+ IntToChar6, IntToChar7, IntToChar8
+
+contains
+
+ pure integer function get_k(tt)
+ type(t), intent(in) :: tt
+
+ get_k = tt%k
+ end function get_k
+
+ function IntToChar1(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=m1) :: a
+
+ write(a, *) integerValue
+ end function IntToChar1
+
+ function IntToChar2(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=m2+n1) :: a
+
+ write(a, *) integerValue
+ end function IntToChar2
+
+ function IntToChar3(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=iachar(s(n2:n3))) :: a
+
+ write(a, *) integerValue
+ end function IntToChar3
+
+ function IntToChar4(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=tt1(n4)%k) :: a
+
+ write(a, *) integerValue
+ end function IntToChar4
+
+ function IntToChar5(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=maxval((/m3, n5/))) :: a
+
+ write(a, *) integerValue
+ end function IntToChar5
+
+ function IntToChar6(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=x(n6)) :: a
+
+ write(a, *) integerValue
+ end function IntToChar6
+
+ function IntToChar7(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=tt2(min(m4, n7, 2))%kk(n8)) :: a
+
+ write(a, *) integerValue
+ end function IntToChar7
+
+ function IntToChar8(integerValue) result(a)
+ integer, intent(in) :: integerValue
+ character(len=get_k(t(m5, (/31, n9, 53/)))) :: a
+
+ write(a, *) integerValue
+ end function IntToChar8
+
+end module cutils
+
+
+program test
+
+ use cutils
+
+ implicit none
+ character(25) :: str
+
+ str = IntToChar1(3)
+ print *, str
+ str = IntToChar2(3)
+ print *, str
+ str = IntToChar3(3)
+ print *, str
+ str = IntToChar4(3)
+ print *, str
+ str = IntToChar5(3)
+ print *, str
+ str = IntToChar6(3)
+ print *, str
+ str = IntToChar7(3)
+ print *, str
+ str = IntToChar8(3)
+ print *, str
+
+end program test
+
+! { dg-final { cleanup-modules "cutils" } }