annotate gcc/testsuite/gfortran.dg/coarray_16.f90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 ! { dg-options "-fcoarray=single" }
kono
parents:
diff changeset
3 !
kono
parents:
diff changeset
4 ! Run-time test for IMAGE_INDEX with cobounds only known at
kono
parents:
diff changeset
5 ! the compile time, suitable for any number of NUM_IMAGES()
kono
parents:
diff changeset
6 ! For compile-time cobounds, the -fcoarray=lib version still
kono
parents:
diff changeset
7 ! needs to run-time evalulation if image_index returns > 1
kono
parents:
diff changeset
8 ! as image_index is 0 if the index would exceed num_images().
kono
parents:
diff changeset
9 !
kono
parents:
diff changeset
10 ! Please set num_images() to >= 13, if possible.
kono
parents:
diff changeset
11 !
kono
parents:
diff changeset
12 ! PR fortran/18918
kono
parents:
diff changeset
13 !
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 program test_image_index
kono
parents:
diff changeset
16 implicit none
kono
parents:
diff changeset
17 integer :: index1, index2, index3
kono
parents:
diff changeset
18 logical :: one
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 integer, allocatable :: a(:)[:,:,:], b(:)[:,:], c(:,:)[:]
kono
parents:
diff changeset
21 integer, save :: d(2)[-1:3, *]
kono
parents:
diff changeset
22 integer, save :: e(2)[-1:-1, 3:*]
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 one = num_images() == 1
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 allocate(a(1)[3:3, -4:-3, 88:*])
kono
parents:
diff changeset
27 allocate(b(2)[-1:0,0:*])
kono
parents:
diff changeset
28 allocate(c(3,3)[*])
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 index1 = image_index(a, [3, -4, 88] )
kono
parents:
diff changeset
31 index2 = image_index(b, [-1, 0] )
kono
parents:
diff changeset
32 index3 = image_index(c, [1] )
kono
parents:
diff changeset
33 if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort()
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 index1 = image_index(a, [3, -3, 88] )
kono
parents:
diff changeset
37 index2 = image_index(b, [0, 0] )
kono
parents:
diff changeset
38 index3 = image_index(c, [2] )
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) &
kono
parents:
diff changeset
41 call abort()
kono
parents:
diff changeset
42 if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) &
kono
parents:
diff changeset
43 call abort()
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 index1 = image_index(d, [-1, 1] )
kono
parents:
diff changeset
47 index2 = image_index(d, [0, 1] )
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 if (one .and. (index1 /= 1 .or. index2 /= 0)) &
kono
parents:
diff changeset
50 call abort()
kono
parents:
diff changeset
51 if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) &
kono
parents:
diff changeset
52 call abort()
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 index1 = image_index(e, [-1, 3] )
kono
parents:
diff changeset
55 index2 = image_index(e, [-1, 4] )
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 if (one .and. (index1 /= 1 .or. index2 /= 0)) &
kono
parents:
diff changeset
58 call abort()
kono
parents:
diff changeset
59 if (.not. one .and. (index1 /= 1 .or. index2 /= 2)) &
kono
parents:
diff changeset
60 call abort()
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 call test(1, a,b,c)
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 ! The following test is in honour of the F2008 standard:
kono
parents:
diff changeset
65 deallocate(a)
kono
parents:
diff changeset
66 allocate(a (10) [10, 0:9, 0:*])
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 index1 = image_index(a, [1, 0, 0] )
kono
parents:
diff changeset
69 index2 = image_index(a, [3, 1, 2] ) ! = 213, yeah!
kono
parents:
diff changeset
70 index3 = image_index(a, [3, 1, 0] ) ! = 13
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 if (num_images() < 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 0)) &
kono
parents:
diff changeset
73 call abort()
kono
parents:
diff changeset
74 if (num_images() >= 213 .and. (index1 /= 1 .or. index2 /= 213 .or. index3 /= 13)) &
kono
parents:
diff changeset
75 call abort()
kono
parents:
diff changeset
76 if (num_images() >= 13 .and. (index1 /= 1 .or. index2 /= 0 .or. index3 /= 13)) &
kono
parents:
diff changeset
77 call abort()
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 contains
kono
parents:
diff changeset
81 subroutine test(n, a, b, c)
kono
parents:
diff changeset
82 integer :: n
kono
parents:
diff changeset
83 integer :: a(1)[3*n:3*n, -4*n:-3*n, 88*n:*], b(2)[-1*n:0*n,0*n:*], c(3*n,3*n)[*]
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 index1 = image_index(a, [3, -4, 88] )
kono
parents:
diff changeset
86 index2 = image_index(b, [-1, 0] )
kono
parents:
diff changeset
87 index3 = image_index(c, [1] )
kono
parents:
diff changeset
88 if (index1 /= 1 .or. index2 /= 1 .or. index3 /= 1) call abort()
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 index1 = image_index(a, [3, -3, 88] )
kono
parents:
diff changeset
92 index2 = image_index(b, [0, 0] )
kono
parents:
diff changeset
93 index3 = image_index(c, [2] )
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 if (one .and. (index1 /= 0 .or. index2 /= 0 .or. index3 /= 0)) &
kono
parents:
diff changeset
96 call abort()
kono
parents:
diff changeset
97 if (.not. one .and. (index1 /= 2 .or. index2 /= 2 .or. index3 /= 2)) &
kono
parents:
diff changeset
98 call abort()
kono
parents:
diff changeset
99 end subroutine test
kono
parents:
diff changeset
100 end program test_image_index