Files
clang-p2996/flang/test/Semantics/assign08.f90
Peter Klausler f2dac557f5 [flang] Intrinsic assignment of distinct but "same" derived types
Subclause 7.5.2.4 lists conditions under which two distinct derived
types are to be considered the same type for purposes of argument
association, assignment, and so on.  These conditions are implemented
in evaluate::IsTkCompatibleWith(), but assignment semantics doesn't
use it for testing for intrinsic assignment compatibility.  Fix that.

Differential Revision: https://reviews.llvm.org/D117621
2022-01-19 10:08:17 -08:00

49 lines
1.1 KiB
Fortran

! 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