xref: /llvm-project/flang/test/Semantics/io14.f90 (revision 49016d53e8f54d4b0883f4fcb06800bcfd7bd40e)
15ea0ba2cSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1
25ea0ba2cSPeter Klausler! Test polymorphic restrictions
35ea0ba2cSPeter Klauslermodule m
45ea0ba2cSPeter Klausler  type base
55ea0ba2cSPeter Klausler  end type
65ea0ba2cSPeter Klausler  type, extends(base) :: t
75ea0ba2cSPeter Klausler    integer n
85ea0ba2cSPeter Klausler   contains
95ea0ba2cSPeter Klausler    procedure :: fwrite
105ea0ba2cSPeter Klausler    generic :: write(formatted) => fwrite
115ea0ba2cSPeter Klausler  end type
12*49016d53SPeter Klausler  type, extends(t) :: t2
13*49016d53SPeter Klausler  end type
145ea0ba2cSPeter Klausler contains
155ea0ba2cSPeter Klausler  subroutine fwrite(x, unit, iotype, vlist, iostat, iomsg)
165ea0ba2cSPeter Klausler    class(t), intent(in) :: x
175ea0ba2cSPeter Klausler    integer, intent(in) :: unit
185ea0ba2cSPeter Klausler    character(*), intent(in) :: iotype
195ea0ba2cSPeter Klausler    integer, intent(in) :: vlist(:)
205ea0ba2cSPeter Klausler    integer, intent(out) :: iostat
215ea0ba2cSPeter Klausler    character(*), intent(in out) :: iomsg
225ea0ba2cSPeter Klausler    write(unit, *, iostat=iostat, iomsg=iomsg) '(', iotype, ':', vlist, ':', x%n, ')'
235ea0ba2cSPeter Klausler  end subroutine
24*49016d53SPeter Klausler  subroutine subr(x, y, z, w)
255ea0ba2cSPeter Klausler    class(t), intent(in) :: x
265ea0ba2cSPeter Klausler    class(base), intent(in) :: y
275ea0ba2cSPeter Klausler    class(*), intent(in) :: z
28*49016d53SPeter Klausler    class(t2), intent(in) :: w
295ea0ba2cSPeter Klausler    print *, x ! ok
30*49016d53SPeter Klausler    print *, w ! ok
315ea0ba2cSPeter Klausler    !ERROR: Derived type 'base' in I/O may not be polymorphic unless using defined I/O
325ea0ba2cSPeter Klausler    print *, y
335ea0ba2cSPeter Klausler    !ERROR: I/O list item may not be unlimited polymorphic
345ea0ba2cSPeter Klausler    print *, z
355ea0ba2cSPeter Klausler  end subroutine
365ea0ba2cSPeter Klauslerend
37