When the code below is run with the coarray option toggled on, different behaviors are observed depending on which line (20 or 21) is commented out.
- Commenting out line 20 yields the expected result
- Commenting out line 21 yields an access violation error on line 37.
Since the variable on line 37 is not coindexed, I am surprised by this result. Does this work with version 18 of the compiler?
MODULE M IMPLICIT NONE TYPE,ABSTRACT :: T_SHAPE_CONTAINER CHARACTER(LEN=:),ALLOCATABLE :: NAME END TYPE T_SHAPE_CONTAINER TYPE,EXTENDS(T_SHAPE_CONTAINER) :: T_POINT_CONTAINER REAL,ALLOCATABLE :: COORDINATES(:,:) END TYPE T_POINT_CONTAINER TYPE,EXTENDS(T_SHAPE_CONTAINER) :: T_LINE_CONTAINER REAL,ALLOCATABLE :: COORDINATES(:,:,:) END TYPE T_LINE_CONTAINER TYPE :: T_CONTAINER CLASS(T_SHAPE_CONTAINER),ALLOCATABLE :: SHAPE_CONTAINER END TYPE T_CONTAINER TYPE :: T_SHAPE_DATA TYPE(T_CONTAINER),ALLOCATABLE :: SHAPES(:) END TYPE T_SHAPE_DATA TYPE(T_SHAPE_DATA) :: SHAPE_DATA_1[*],SHAPE_DATA_2[*] !TYPE(T_SHAPE_DATA) :: SHAPE_DATA_1,SHAPE_DATA_2 END MODULE M PROGRAM P USE M IMPLICIT NONE INTEGER :: I ALLOCATE(SHAPE_DATA_1%SHAPES(2)) ALLOCATE(T_POINT_CONTAINER :: SHAPE_DATA_1%SHAPES(1)%SHAPE_CONTAINER) ALLOCATE(T_LINE_CONTAINER :: SHAPE_DATA_1%SHAPES(2)%SHAPE_CONTAINER) DO I=1,2 SELECT TYPE (A => SHAPE_DATA_1%SHAPES(I)%SHAPE_CONTAINER) TYPE IS (T_POINT_CONTAINER) A%NAME = 'Points' ALLOCATE(A%COORDINATES(3,2)) A%COORDINATES(:,1) = [1.,2.,3.] A%COORDINATES(:,2) = [4.,5.,6.] TYPE IS (T_LINE_CONTAINER) ALLOCATE(A%COORDINATES(3,2,2)) A%NAME = 'Lines' A%COORDINATES(:,1,1) = [7.,8.,9.] A%COORDINATES(:,2,1) = [10.,11.,12.] A%COORDINATES(:,1,2) = [13.,14.,15.] A%COORDINATES(:,2,2) = [16.,17.,18.] END SELECT END DO SHAPE_DATA_2 = SHAPE_DATA_1 DO I=1,2 SELECT TYPE (A => SHAPE_DATA_2%SHAPES(I)%SHAPE_CONTAINER) TYPE IS (T_POINT_CONTAINER) WRITE(*,* )A%NAME WRITE(*,*) A%COORDINATES TYPE IS (T_LINE_CONTAINER) WRITE(*,* )A%NAME WRITE(*,*) A%COORDINATES END SELECT END DO END PROGRAM P