Skip to content

Defect: sendget_by_ref() incorrect assignment on LHS when rank == 2 #654

Closed
@nathanweeks

Description

@nathanweeks
  • I am reporting a bug others will be able to reproduce and not asking a question or requesting a new feature.

The sendget_by_ref issue first reported in #632 (comment) still applies in OpenCoarrays as of d13375d.

This routine is exercised when a coarray of derived type with allocatable component is on both the LHS and the RHS of an assignment statement.

Specifically, there is a problem with the result of the assignment (LHS), at least when the allocatable component on the LHS is an array of rank == 2:

program test_sendget_by_ref
  implicit none
  type :: rank1_type
    integer, allocatable :: A(:)
  end type
  type :: rank2_type
    integer, allocatable :: A(:,:)
  end type
  type(rank1_type) :: R_get[*]
  type(rank2_type) :: R_send[*]
  integer :: i, j

  allocate(R_get%A(this_image()), source=-1)
  R_get%A(this_image()) = this_image()

  allocate(R_send%A(num_images(),num_images()), source=-2)

  sync all

  do i = 1, num_images()
    do j = 1, num_images()
      R_send[i]%A(j,this_image()) = R_get[j]%A(j)
    end do
  end do

  sync all

  write(*,*) this_image(), ':', R_get%A, '|', R_send%A
end program test_sendget_by_ref

Output:

$ caf test_sendget_by_ref.f90
$ cafrun -np 3 ./a.out  | sort -k 1n,1n
           1 :           1 |           1          -2           2          -2           3          -2          -2          -2          -2
           2 :          -1           2 |           1          -2           2          -2           3          -2          -2          -2          -2
           3 :          -1          -1           3 |           1          -2           2          -2           3          -2          -2          -2          -2

The values for R_get%A (before the "|" in preceding output) look correct; however, the values of the R_send%A array (after the "|" in the preceding output) should be for all images:

1          2           3          1           2          3          1          2          3

System information

  • OpenCoarrays Version: 2.6.1-30-gd13375d
  • Fortran Compiler: GFortran 8.3.0
  • C compiler used for building lib: GCC 8.3.0
  • Installation method: FC=gfortran CC=gcc cmake .. -DCMAKE_BUILD_TYPE=Debug
  • All flags & options passed to the installer: N/A
  • MPI library being used: MPICH 3.3
  • Machine architecture and number of physical cores: x86_64, 2 cores (4 threads)
  • Version of CMake: 3.13.4

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions