xref: /llvm-project/flang/test/Semantics/io15.f90 (revision 5ea0ba2c13af3c6c8e68701b00695f0f0481bed0)
1! RUN: %python %S/test_errors.py %s %flang_fc1
2! Test visibility restrictions
3module m
4  type t1
5    integer, private :: ip1 = 123
6   contains
7    procedure :: fwrite1
8    generic :: write(formatted) => fwrite1
9  end type t1
10  type t2
11    integer, private :: ip2 = 234
12    type(t1) x1
13  end type t2
14  type t3
15    type(t1) x1
16    type(t2) x2
17  end type t3
18  type, extends(t2) :: t4
19  end type t4
20 contains
21  subroutine fwrite1(x, unit, iotype, vlist, iostat, iomsg)
22    class(t1), intent(in) :: x
23    integer, intent(in) :: unit
24    character(*), intent(in) :: iotype
25    integer, intent(in) :: vlist(:)
26    integer, intent(out) :: iostat
27    character(*), intent(in out) :: iomsg
28    write(unit, *, iostat=iostat, iomsg=iomsg) '(', iotype, ':', vlist, ':', x%ip1, ')'
29  end subroutine
30  subroutine local ! all OK since type is local
31    type(t1) :: x1
32    type(t2) :: x2
33    type(t3) :: x3
34    type(t4) :: x4
35    print *, x1
36    print *, x2
37    print *, x3
38    print *, x4
39  end subroutine
40end module
41
42program main
43  use m
44  type(t1) :: x1
45  type(t2) :: x2
46  type(t3) :: x3
47  type(t4) :: x4
48  print *, x1 ! ok
49  !ERROR: I/O of the derived type 't2' may not be performed without defined I/O in a scope in which a direct component like 'ip2' is inaccessible
50  print *, x2
51  !ERROR: I/O of the derived type 't3' may not be performed without defined I/O in a scope in which a direct component like 'ip2' is inaccessible
52  print *, x3
53  !ERROR: I/O of the derived type 't4' may not be performed without defined I/O in a scope in which a direct component like 'ip2' is inaccessible
54  print *, x4
55end
56