1! { dg-do run }
2!
3! PR fortran/84135
4!
5! Co-contributed by G. Steinmetz
6!
7! Ensure that coarray shape remains correct
8! after merging the shape from 'dimension'
9!
10program p
11   integer :: i
12   integer, dimension(3) :: x[2,*]
13   data (x(i:i+2:i+1), i=1,2) /1,2,3/
14   integer, dimension(3) :: y[2,3,-3:4,5,7:*] = [1,2,3]
15   integer :: z, z2[2:4,7:9,-2:2,-7:8,-4:*]
16   codimension :: z[2:4,7:9,-2:2,-7:8,-4:*]
17   integer, codimension[1:*] :: z3[2:4,7:9,-2:2,-7:8,-4:*]
18   dimension :: z(1:2,-3:-2,7:7), z2(1:2,-3:-2,7:7), z3(1:2,-3:-2,7:7)
19   integer, codimension[2:4,7:9,-2:2,-7:8,-4:*], dimension(1:2,-3:-2,7:7) :: z4
20   integer, codimension[*], dimension(1:2,-3:-2,7:7) :: z5[2:4,7:9,-2:2,-7:8,-4:*]
21   integer, codimension[2:4,7:9,-2:2,-7:8,-4:*], dimension(3) :: z6(1:2,-3:-2,7:7)
22   integer, codimension[*], dimension(4) :: z7(1:2,-3:-2,7:7)[2:4,7:9,-2:2,-7:8,-4:*]
23
24   if (any (lcobound(x) /= [1, 1])) stop 1
25   if (any (lcobound(y) /= [1, 1, -3, 1, 7])) stop 3
26   if (any (lcobound(z) /= [2,7,-2,-7,-4])) stop 4
27   if (any (lcobound(z2) /= lcobound(z))) stop 4
28   if (any (lcobound(z3) /= lcobound(z))) stop 5
29   if (any (lcobound(z4) /= lcobound(z))) stop 6
30   if (any (lcobound(z5) /= lcobound(z))) stop 7
31   if (any (lcobound(z6) /= lcobound(z))) stop 8
32   if (any (lcobound(z7) /= lcobound(z))) stop 9
33
34   if (any (lbound(x) /= [1])) stop 11
35   if (any (lbound(y) /= [1])) stop 12
36   if (any (lbound(z) /= [1,-3,7])) stop 13
37   if (any (lbound(z2) /= lbound(z))) stop 14
38   if (any (lbound(z3) /= lbound(z))) stop 15
39   if (any (lbound(z4) /= lbound(z))) stop 16
40   if (any (lbound(z5) /= lbound(z))) stop 17
41   if (any (lbound(z6) /= lbound(z))) stop 18
42   if (any (lbound(z7) /= lbound(z))) stop 19
43
44   if (any (ubound(x) /= [3])) stop 21
45   if (any (ubound(y) /= [3])) stop 22
46   if (any (ubound(z) /= [2,-2,7])) stop 23
47   if (any (ubound(z2) /= ubound(z))) stop 24
48   if (any (ubound(z3) /= ubound(z))) stop 25
49   if (any (ubound(z4) /= ubound(z))) stop 26
50   if (any (ubound(z5) /= ubound(z))) stop 27
51   if (any (ubound(z6) /= ubound(z))) stop 28
52   if (any (ubound(z7) /= ubound(z))) stop 29
53
54   if (any (ucobound(z2) /= ucobound(z))) stop 31
55   if (any (ucobound(z3) /= ucobound(z))) stop 32
56   if (any (ucobound(z4) /= ucobound(z))) stop 33
57   if (any (ucobound(z5) /= ucobound(z))) stop 34
58   if (any (ucobound(z6) /= ucobound(z))) stop 35
59   if (any (ucobound(z7) /= ucobound(z))) stop 36
60
61   if (num_images() == 1) then
62     if (any (ucobound(x) /= [2, lbound(x,dim=1)])) stop 37
63     if (any (ucobound(y) /= [2, 3, 4, 5, 7])) stop 38
64     if (any (ucobound(z) /= [4,9,2,8,-4])) stop 39
65   else
66     if (ucobound(x, dim=1) /= 2) stop 41
67     if (ucobound(y, dim=1) /= 2) stop 42
68     if (ucobound(y, dim=2) /= 3) stop 43
69     if (ucobound(y, dim=3) /= 4) stop 44
70     if (ucobound(y, dim=4) /= 5) stop 45
71     if (ucobound(z, dim=1) /= 4) stop 46
72     if (ucobound(z, dim=2) /= 9) stop 47
73     if (ucobound(z, dim=3) /= 2) stop 48
74     if (ucobound(z, dim=4) /= 8) stop 49
75   endif
76end
77