mirror-llvm-project/flang/test/Semantics/bug124621.f90
Peter Klausler 4927a5ed4a
[flang] Allow defined assignment to CLASS(*) (#124817)
An unlimited polymorphic left-hand side variable is acceptable in the
definition of a defined assignment subroutine.

Fixes https://github.com/llvm/llvm-project/issues/124621.
2025-01-31 10:53:40 -08:00

46 lines
980 B
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
module m
type t1
contains
procedure, pass(from) :: defAsst1
generic :: assignment(=) => defAsst1
end type
type t2
end type
type t3
end type
interface assignment(=)
module procedure defAsst2
end interface
contains
subroutine defAsst1(to,from)
class(*), intent(out) :: to
class(t1), intent(in) :: from
end
subroutine defAsst2(to,from)
class(*), intent(out) :: to
class(t2), intent(in) :: from
end
end
program test
use m
type(t1) x1
type(t2) x2
type(t3) x3
j = x1
j = x2
!ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types INTEGER(4) and TYPE(t3)
j = x3
x1 = x1
x1 = x2
!ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types TYPE(t1) and TYPE(t3)
x1 = x3
x2 = x1
x2 = x2
!ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types TYPE(t2) and TYPE(t3)
x2 = x3
x3 = x1
x3 = x2
x3 = x3
end