| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Test visibility restrictions |
| module m |
| type t1 |
| integer, private :: ip1 = 123 |
| contains |
| procedure :: fwrite1 |
| generic :: write(formatted) => fwrite1 |
| end type t1 |
| type t2 |
| integer, private :: ip2 = 234 |
| type(t1) x1 |
| end type t2 |
| type t3 |
| type(t1) x1 |
| type(t2) x2 |
| end type t3 |
| type, extends(t2) :: t4 |
| end type t4 |
| contains |
| subroutine fwrite1(x, unit, iotype, vlist, iostat, iomsg) |
| class(t1), intent(in) :: x |
| integer, intent(in) :: unit |
| character(*), intent(in) :: iotype |
| integer, intent(in) :: vlist(:) |
| integer, intent(out) :: iostat |
| character(*), intent(in out) :: iomsg |
| write(unit, *, iostat=iostat, iomsg=iomsg) '(', iotype, ':', vlist, ':', x%ip1, ')' |
| end subroutine |
| subroutine local ! all OK since type is local |
| type(t1) :: x1 |
| type(t2) :: x2 |
| type(t3) :: x3 |
| type(t4) :: x4 |
| print *, x1 |
| print *, x2 |
| print *, x3 |
| print *, x4 |
| end subroutine |
| end module |
| |
| program main |
| use m |
| type(t1) :: x1 |
| type(t2) :: x2 |
| type(t3) :: x3 |
| type(t4) :: x4 |
| print *, x1 ! ok |
| !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 |
| print *, x2 |
| !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 |
| print *, x3 |
| !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 |
| print *, x4 |
| end |