annotate gcc/testsuite/gfortran.dg/pdt_1.f03 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 ! { dg-options "-fcheck=all" }
kono
parents:
diff changeset
3 !
kono
parents:
diff changeset
4 ! Basic check of Parameterized Derived Types.
kono
parents:
diff changeset
5 !
kono
parents:
diff changeset
6 ! -fcheck=all is used here to ensure that when the parameter
kono
parents:
diff changeset
7 ! 'b' of the dummy in 'foo' is assumed, there is no error.
kono
parents:
diff changeset
8 ! Likewise in 'bar' and 'foobar', when 'b' has the correct
kono
parents:
diff changeset
9 ! explicit value.
kono
parents:
diff changeset
10 !
kono
parents:
diff changeset
11 implicit none
kono
parents:
diff changeset
12 integer, parameter :: ftype = kind(0.0e0)
kono
parents:
diff changeset
13 integer :: pdt_len = 4
kono
parents:
diff changeset
14 integer :: i
kono
parents:
diff changeset
15 type :: mytype (a,b)
kono
parents:
diff changeset
16 integer, kind :: a = kind(0.0d0)
kono
parents:
diff changeset
17 integer, LEN :: b
kono
parents:
diff changeset
18 integer :: i
kono
parents:
diff changeset
19 real(kind = a) :: d(b, b)
kono
parents:
diff changeset
20 character (len = b*b) :: chr
kono
parents:
diff changeset
21 end type
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 type(mytype(b=4)) :: z(2)
kono
parents:
diff changeset
24 type(mytype(ftype, 4)) :: z2
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 z(1)%i = 1
kono
parents:
diff changeset
27 z(2)%i = 2
kono
parents:
diff changeset
28 z(1)%d = reshape ([(real(i), i = 1, 16)],[4,4])
kono
parents:
diff changeset
29 z(2)%d = 10*z(1)%d
kono
parents:
diff changeset
30 z(1)%chr = "hello pdt"
kono
parents:
diff changeset
31 z(2)%chr = "goodbye pdt"
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 z2%d = z(1)%d * 10 - 1
kono
parents:
diff changeset
34 z2%chr = "scalar pdt"
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 call foo (z)
kono
parents:
diff changeset
37 call bar (z)
kono
parents:
diff changeset
38 call foobar (z2)
kono
parents:
diff changeset
39 contains
kono
parents:
diff changeset
40 elemental subroutine foo (arg)
kono
parents:
diff changeset
41 type(mytype(8,*)), intent(in) :: arg
kono
parents:
diff changeset
42 if (arg%i .eq. 1) then
kono
parents:
diff changeset
43 if (trim (arg%chr) .ne. "hello pdt") error stop
kono
parents:
diff changeset
44 if (int (sum (arg%d)) .ne. 136) error stop
kono
parents:
diff changeset
45 else if (arg%i .eq. 2 ) then
kono
parents:
diff changeset
46 if (trim (arg%chr) .ne. "goodbye pdt") error stop
kono
parents:
diff changeset
47 if (int (sum (arg%d)) .ne. 1360) error stop
kono
parents:
diff changeset
48 else
kono
parents:
diff changeset
49 error stop
kono
parents:
diff changeset
50 end if
kono
parents:
diff changeset
51 end subroutine
kono
parents:
diff changeset
52 subroutine bar (arg)
kono
parents:
diff changeset
53 type(mytype(b=4)) :: arg(:)
kono
parents:
diff changeset
54 if (int (sum (arg(1)%d)) .ne. 136) call abort
kono
parents:
diff changeset
55 if (trim (arg(2)%chr) .ne. "goodbye pdt") call abort
kono
parents:
diff changeset
56 end subroutine
kono
parents:
diff changeset
57 subroutine foobar (arg)
kono
parents:
diff changeset
58 type(mytype(ftype, pdt_len)) :: arg
kono
parents:
diff changeset
59 if (int (sum (arg%d)) .ne. 1344) call abort
kono
parents:
diff changeset
60 if (trim (arg%chr) .ne. "scalar pdt") call abort
kono
parents:
diff changeset
61 end subroutine
kono
parents:
diff changeset
62 end