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