Break circular dependency between FIR dialect and utilities
[llvm-project.git] / flang / test / Semantics / structconst02.f90
blob24ec0a196401574a7ef384df7fd1437fcc81e83e
1 ! RUN: %python %S/test_errors.py %s %flang_fc1
2 ! Error tests for structure constructors: per-component type
3 ! (in)compatibility.
5 module module1
6 interface
7 real function realfunc(x)
8 real, value :: x
9 end function realfunc
10 end interface
11 type :: scalar(ik,rk,zk,ck,lk,len)
12 integer, kind :: ik = 4, rk = 4, zk = 4, ck = 1, lk = 1
13 integer, len :: len = 1
14 integer(kind=ik) :: ix = int(0,kind=ik)
15 real(kind=rk) :: rx = real(0.,kind=rk)
16 complex(kind=zk) :: zx = cmplx(0.,0.,kind=zk)
17 !ERROR: Initialization expression for 'cx' (%SET_LENGTH(" ",len)) cannot be computed as a constant value
18 character(kind=ck,len=len) :: cx = ' '
19 logical(kind=lk) :: lx = .false.
20 real(kind=rk), pointer :: rp => NULL()
21 procedure(realfunc), pointer, nopass :: rfp1 => NULL()
22 procedure(real), pointer, nopass :: rfp2 => NULL()
23 end type scalar
24 contains
25 subroutine scalararg(x)
26 type(scalar), intent(in) :: x
27 end subroutine scalararg
28 subroutine errors(n)
29 integer, intent(in) :: n
30 call scalararg(scalar(4)()) ! ok
31 !ERROR: Structure constructor lacks a value for component 'cx'
32 call scalararg(scalar(len=n)()) ! triggers error on 'cx'
33 call scalararg(scalar(4)(ix=1,rx=2.,zx=(3.,4.),cx='a',lx=.true.))
34 call scalararg(scalar(4)(1,2.,(3.,4.),'a',.true.))
35 ! call scalararg(scalar(4)(ix=5.,rx=6,zx=(7._8,8._2),cx=4_'b',lx=.true._4))
36 ! call scalararg(scalar(4)(5.,6,(7._8,8._2),4_'b',.true._4))
37 call scalararg(scalar(4)(ix=5.,rx=6,zx=(7._8,8._2),cx=4_'b',lx=.true.))
38 call scalararg(scalar(4)(5.,6,(7._8,8._2),4_'b',.true.))
39 !ERROR: Value in structure constructor of type 'CHARACTER(KIND=1,LEN=1_8)' is incompatible with component 'ix' of type 'INTEGER(4)'
40 call scalararg(scalar(4)(ix='a'))
41 !ERROR: Value in structure constructor of type 'LOGICAL(4)' is incompatible with component 'ix' of type 'INTEGER(4)'
42 call scalararg(scalar(4)(ix=.false.))
43 !ERROR: Rank-1 array value is not compatible with scalar component 'ix'
44 call scalararg(scalar(4)(ix=[1]))
45 !TODO more!
46 end subroutine errors
47 end module module1