| ! { dg-do run } |
| ! |
| ! Tests dtio transfer sequence types. |
| ! |
| ! Note difficulty at end with comparisons at any level of optimization. |
| ! |
| MODULE p |
| TYPE :: person |
| sequence |
| CHARACTER (LEN=20) :: name |
| INTEGER(4) :: age |
| END TYPE person |
| INTERFACE WRITE(UNFORMATTED) |
| MODULE PROCEDURE pwuf |
| END INTERFACE |
| INTERFACE READ(UNFORMATTED) |
| MODULE PROCEDURE pruf |
| END INTERFACE |
| |
| CONTAINS |
| |
| SUBROUTINE pwuf (dtv,unit,iostat,iomsg) |
| type(person), INTENT(IN) :: dtv |
| INTEGER, INTENT(IN) :: unit |
| INTEGER, INTENT(OUT) :: iostat |
| CHARACTER (LEN=*), INTENT(INOUT) :: iomsg |
| WRITE (UNIT=UNIT) DTV%name, DTV%age |
| END SUBROUTINE pwuf |
| |
| SUBROUTINE pruf (dtv,unit,iostat,iomsg) |
| type(person), INTENT(INOUT) :: dtv |
| INTEGER, INTENT(IN) :: unit |
| INTEGER, INTENT(OUT) :: iostat |
| CHARACTER (LEN=*), INTENT(INOUT) :: iomsg |
| READ (UNIT = UNIT) dtv%name, dtv%age |
| END SUBROUTINE pruf |
| |
| END MODULE p |
| |
| PROGRAM test |
| USE p |
| TYPE (person) :: chairman |
| character(10) :: line |
| |
| chairman%name="Charlie" |
| chairman%age=62 |
| |
| OPEN (UNIT=71, status = 'scratch', FORM='UNFORMATTED') |
| write (71) chairman |
| rewind (71) |
| |
| chairman%name = "Charles" |
| chairman%age = 0 |
| |
| read (71) chairman |
| close (unit = 71) |
| |
| ! Straight comparisons fail at any level of optimization. |
| |
| write(line, "(A7)") chairman%name |
| if (trim (line) .ne. "Charlie") STOP 1 |
| line = " " |
| write(line, "(I4)") chairman%age |
| if (trim (line) .eq. " 62") print *, trim(line) |
| END PROGRAM test |