annotate gcc/testsuite/gfortran.dg/dtio_8.f90 @ 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 !
kono
parents:
diff changeset
3 ! Tests dtio transfer sequence types.
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Note difficulty at end with comparisons at any level of optimization.
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 MODULE p
kono
parents:
diff changeset
8 TYPE :: person
kono
parents:
diff changeset
9 sequence
kono
parents:
diff changeset
10 CHARACTER (LEN=20) :: name
kono
parents:
diff changeset
11 INTEGER(4) :: age
kono
parents:
diff changeset
12 END TYPE person
kono
parents:
diff changeset
13 INTERFACE WRITE(UNFORMATTED)
kono
parents:
diff changeset
14 MODULE PROCEDURE pwuf
kono
parents:
diff changeset
15 END INTERFACE
kono
parents:
diff changeset
16 INTERFACE READ(UNFORMATTED)
kono
parents:
diff changeset
17 MODULE PROCEDURE pruf
kono
parents:
diff changeset
18 END INTERFACE
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 CONTAINS
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 SUBROUTINE pwuf (dtv,unit,iostat,iomsg)
kono
parents:
diff changeset
23 type(person), INTENT(IN) :: dtv
kono
parents:
diff changeset
24 INTEGER, INTENT(IN) :: unit
kono
parents:
diff changeset
25 INTEGER, INTENT(OUT) :: iostat
kono
parents:
diff changeset
26 CHARACTER (LEN=*), INTENT(INOUT) :: iomsg
kono
parents:
diff changeset
27 WRITE (UNIT=UNIT) DTV%name, DTV%age
kono
parents:
diff changeset
28 END SUBROUTINE pwuf
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 SUBROUTINE pruf (dtv,unit,iostat,iomsg)
kono
parents:
diff changeset
31 type(person), INTENT(INOUT) :: dtv
kono
parents:
diff changeset
32 INTEGER, INTENT(IN) :: unit
kono
parents:
diff changeset
33 INTEGER, INTENT(OUT) :: iostat
kono
parents:
diff changeset
34 CHARACTER (LEN=*), INTENT(INOUT) :: iomsg
kono
parents:
diff changeset
35 READ (UNIT = UNIT) dtv%name, dtv%age
kono
parents:
diff changeset
36 END SUBROUTINE pruf
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 END MODULE p
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 PROGRAM test
kono
parents:
diff changeset
41 USE p
kono
parents:
diff changeset
42 TYPE (person) :: chairman
kono
parents:
diff changeset
43 character(10) :: line
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 chairman%name="Charlie"
kono
parents:
diff changeset
46 chairman%age=62
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 OPEN (UNIT=71, status = 'scratch', FORM='UNFORMATTED')
kono
parents:
diff changeset
49 write (71) chairman
kono
parents:
diff changeset
50 rewind (71)
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 chairman%name = "Charles"
kono
parents:
diff changeset
53 chairman%age = 0
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 read (71) chairman
kono
parents:
diff changeset
56 close (unit = 71)
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 ! Straight comparisons fail at any level of optimization.
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 write(line, "(A7)") chairman%name
kono
parents:
diff changeset
61 if (trim (line) .ne. "Charlie") call abort
kono
parents:
diff changeset
62 line = " "
kono
parents:
diff changeset
63 write(line, "(I4)") chairman%age
kono
parents:
diff changeset
64 if (trim (line) .eq. " 62") print *, trim(line)
kono
parents:
diff changeset
65 END PROGRAM test