| !RUN: %flang_fc1 -fdebug-unparse %s | FileCheck %s |
| !Ensure that non-elemental specific takes precedence over elemental |
| !defined assignment, even with non-default PASS argument. |
| module m |
| type base |
| integer :: n = -999 |
| contains |
| procedure, pass(from) :: array_assign_scalar |
| procedure :: elemental_assign |
| generic :: assignment(=) => array_assign_scalar, elemental_assign |
| end type |
| contains |
| subroutine array_assign_scalar(to, from) |
| class(base), intent(out) :: to(:) |
| class(base), intent(in) :: from |
| to%n = from%n |
| end |
| impure elemental subroutine elemental_assign(to, from) |
| class(base), intent(out) :: to |
| class(base), intent(in) :: from |
| to%n = from%n |
| end |
| end |
| |
| use m |
| type(base) :: array(1), scalar |
| scalar%n = 1 |
| !CHECK: CALL array_assign_scalar(array,(scalar)) |
| array = scalar |
| !CHECK: CALL elemental_assign(array,[base::scalar]) |
| array = [scalar] |
| end |