blob: 6aecc34b6656e1eb7ac03b5b2334aaa8222d188d [file] [log] [blame]
! { dg-do compile }
! { dg-options "-fcoarray=lib -fdump-tree-original" }
!
! Check whether TOKEN and OFFSET are correctly propagated
!
! THIS PART FAILED (ICE) DUE TO TYPE SHARING
module matrix_data
implicit none
type sparse_CSR_matrix
integer, allocatable :: a(:)
end type sparse_CSR_matrix
CONTAINS
subroutine build_CSR_matrix(CSR)
type(sparse_CSR_matrix), intent(out) :: CSR
integer, allocatable :: CAF_begin[:]
call global_to_local_index(CAF_begin)
end subroutine build_CSR_matrix
subroutine global_to_local_index(CAF_begin)
integer, intent(out) :: CAF_begin[*]
end subroutine global_to_local_index
end module matrix_data
! DUMP TESTING
program main
implicit none
type t
integer(4) :: a, b
end type t
integer, allocatable :: caf[:]
type(t), allocatable :: caf_dt[:]
allocate (caf[*])
allocate (caf_dt[*])
caf = 42
caf_dt = t (1,2)
call sub (caf, caf_dt%b)
print *,caf, caf_dt%b
if (caf /= -99 .or. caf_dt%b /= -101) STOP 1
call sub_opt ()
call sub_opt (caf)
if (caf /= 124) STOP 2
contains
subroutine sub (x1, x2)
integer :: x1[*], x2[*]
call sub2 (x1, x2)
end subroutine sub
subroutine sub2 (y1, y2)
integer :: y1[*], y2[*]
print *, y1, y2
if (y1 /= 42 .or. y2 /= 2) STOP 3
y1 = -99
y2 = -101
end subroutine sub2
subroutine sub_opt (z)
integer, optional :: z[*]
if (present (z)) then
if (z /= -99) STOP 4
z = 124
end if
end subroutine sub_opt
end program main
! SCAN TREE DUMP AND CLEANUP
!
! PROTOTYPE 1:
!
! sub (integer(kind=4) * restrict x1, integer(kind=4) * restrict x2,
! void * restrict caf_token.4, integer(kind=8) caf_offset.5,
! void * restrict caf_token.6, integer(kind=8) caf_offset.7)
!
! { dg-final { scan-tree-dump-times "sub \\(integer.kind=4. . restrict x1, integer.kind=4. . restrict x2, void . restrict caf_token.\[0-9\]+, integer.kind=.. caf_offset.\[0-9\]+, void . restrict caf_token.\[0-9\]+, integer.kind=.. caf_offset.\[0-9\]+\\)" 1 "original" } }
!
! PROTOTYPE 2:
!
! sub2 (integer(kind=4) * restrict y1, integer(kind=4) * restrict y2,
! void * restrict caf_token.0, integer(kind=8) caf_offset.1,
! void * restrict caf_token.2, integer(kind=8) caf_offset.3)
!
! { dg-final { scan-tree-dump-times "sub2 \\(integer.kind=4. . restrict y1, integer.kind=4. . restrict y2, void . restrict caf_token.\[0-9\]+, integer.kind=.. caf_offset.\[0-9\]+, void . restrict caf_token.\[0-9\]+, integer.kind=.. caf_offset.\[0-9\]+\\)" 1 "original" } }
!
! CALL 1
!
! sub ((integer(kind=4) *) caf.data, &((struct t * restrict) caf_dt.data)->b,
! caf.token, 0, caf_dt.token, 4);
!
! { dg-final { scan-tree-dump-times "sub \\(\[^,\]*caf.data, &\[^,\]*caf_dt.data.->b, caf.token, 0, caf_dt.token, 4\\)" 1 "original" } }
!
! sub2 ((integer(kind=4) *) x1, (integer(kind=4) *) x2,
! caf_token.4, NON_LVALUE_EXPR <caf_offset.5>,
! caf_token.6, NON_LVALUE_EXPR <caf_offset.7>);
!
! { dg-final { scan-tree-dump-times "sub2 \\(\[^,\]*x1, \[^,\]*x2, caf_token.\[0-9]+, \[^,\]*caf_offset\[^,\]*, caf_token.\[0-9\]+, \[^,\]*caf_offset\[^,\]*\\)" 1 "original" } }
!
! CALL 3
!
! { dg-final { scan-tree-dump-times "sub_opt \\(0B, 0B, 0\\)" 1 "original" } }
!
! CALL 4
!
! { dg-final { scan-tree-dump-times "sub_opt \\(.integer.kind=4. .. caf.data, caf.token, 0\\)" 1 "original" } }
!