[flang] Accept polymorphic component element in storage_size
[llvm-project.git] / flang / test / Semantics / transfer01.f90
blob6cd8288e225cdbc72d5cb44668f0b070077c3bd5
1 ! RUN: %python %S/test_errors.py %s %flang_fc1
2 ! Check errors in TRANSFER()
4 subroutine subr(o)
5 integer, intent(in), optional :: o
6 type empty
7 end type
8 type(empty) :: empty1(1)
9 type hasdescriptor
10 real, allocatable :: allocatable
11 end type
12 type(hasdescriptor) hasDesc
13 real :: empty2(0)
14 character(0) :: empty3(1)
15 integer, pointer :: source(:)
16 integer, allocatable :: ia
17 integer, pointer :: ip
18 !ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty
19 print *, transfer(1., empty1)
20 print *, transfer(1., empty2) ! ok
21 !ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty
22 print *, transfer(1., empty3)
23 !WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty
24 print *, transfer(source, empty1)
25 print *, transfer(source, empty2) ! ok
26 !WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty
27 print *, transfer(source, empty3)
28 !ERROR: SIZE= argument may not be the optional dummy argument 'o'
29 print *, transfer(1., empty2, size=o)
30 !WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning
31 print *, transfer(1., empty2, size=ia)
32 !WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning
33 print *, transfer(1., empty2, size=ip)
34 !WARNING: Source of TRANSFER contains allocatable or pointer component %allocatable
35 print *, transfer(hasDesc, 1)
36 end