summaryrefslogtreecommitdiff
path: root/flang/test/Semantics/assign08.f90
blob: 48f2976ed5a8ec22feb7cf801ed7ae639ad4d666 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
! RUN: %python %S/test_errors.py %s %flang_fc1
! "Same type" checking for intrinsic assignment
module m1
  type :: nonSeqType
    integer :: n1
  end type
  type :: seqType
    sequence
    integer :: n2
  end type
  type, bind(c) :: bindCType
    integer :: n3
  end type
end module

program test
  use m1, modNonSeqType => nonSeqType, modSeqType => seqType, modBindCType => bindCType
  type :: nonSeqType
    integer :: n1
  end type
  type :: seqType
    sequence
    integer :: n2
  end type
  type, bind(c) :: bindCType
    integer :: n3
  end type
  type(modNonSeqType) :: mns1, mns2
  type(modSeqType) :: ms1, ms2
  type(modBindCType) :: mb1, mb2
  type(nonSeqType) :: ns1, ns2
  type(seqType) :: s1, s2
  type(bindCType) :: b1, b2
  ! These are trivially ok
  mns1 = mns2
  ms1 = ms2
  mb1 = mb2
  ns1 = ns2
  s1 = s2
  b1 = b2
  ! These are ok per 7.5.2.4
  ms1 = s1
  mb1 = b1
  !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types TYPE(modnonseqtype) and TYPE(nonseqtype)
  mns1 = ns1
  !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types TYPE(nonseqtype) and TYPE(modnonseqtype)
  ns1 = mns1
end