| ! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic |
| ! Check errors in TRANSFER() |
| |
| subroutine subr(o) |
| integer, intent(in), optional :: o |
| type empty |
| end type |
| type(empty) :: empty1(1) |
| type hasdescriptor |
| real, allocatable :: allocatable |
| end type |
| type(hasdescriptor) hasDesc |
| real :: empty2(0) |
| character(0) :: empty3(1) |
| integer, pointer :: source(:) |
| integer, allocatable :: ia |
| integer, pointer :: ip |
| !ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty |
| print *, transfer(1., empty1) |
| print *, transfer(1., empty2) ! ok |
| !ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty |
| print *, transfer(1., empty3) |
| !WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty |
| print *, transfer(source, empty1) |
| print *, transfer(source, empty2) ! ok |
| !WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty |
| print *, transfer(source, empty3) |
| !ERROR: SIZE= argument may not be the optional dummy argument 'o' |
| print *, transfer(1., empty2, size=o) |
| !WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning |
| print *, transfer(1., empty2, size=ia) |
| !WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning |
| print *, transfer(1., empty2, size=ip) |
| !WARNING: Source of TRANSFER contains allocatable or pointer component %allocatable |
| print *, transfer(hasDesc, 1) |
| end |