Issue 142151
Summary [flang] Incorrect resolution of defined assignment
Labels flang:frontend
Assignees
Reporter DanielCChen
    Consider the following code:
```
module m
   type com2
      integer i
 contains
         procedure :: c2a
         generic :: assignment(=) => c2a
   end type

   type, extends(com2) :: c_com2
      integer :: j
 contains
         procedure :: c2a => cc2a
   end type

   contains

 impure elemental subroutine c2a ( a, b )
         class(com2) , intent(out) :: a
         class(com2) , intent(in)  :: b

         print*, "in c2a"
         a%i = b%i + 1

      end subroutine

      impure elemental subroutine cc2a ( a, b )
         class(c_com2) , intent(out) :: a
         class(com2) , intent(in)  :: b

         print*, "in cc2a"
 a%i = b%i + 1

         select type ( b )
            type is ( c_com2 )
               a%j = b%j + 1
         end select

      end subroutine

end module

program genericAssignmentDtIntrinAssgn037
  use m

   type container
      type(c_com2) :: cc21
   end type
 type(container) :: c1

   c1 = container(c_com2(14,15))
   print *, c1%cc21%i, c1%cc21%j

end program
```

Expected behavior:
```
> a.out
 in cc2a
 15 16
```

Flang outputs:
```
> a.out
 in c2a
 15 15
```

The component `cc21` of type `container is of type `c_com2`, so the component assignment should invoke the defined assignment of type `c_com2` rather than it's base type `com2`.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to