tree-optimization/113385 - wrong loop father with early exit vectorization
[official-gcc.git] / gcc / testsuite / gfortran.dg / gomp / imperfect-invalid-scope.f90
blob7cc609441314438dc9f8f0176e2cf09c3cf4b9e8
1 ! Test that various errors involving references to variables bound
2 ! in intervening code in the DO loop control expressions are diagnosed.
4 subroutine foo (x, y)
5 integer :: x, y
6 end subroutine
8 subroutine f1 ()
9 integer :: i, j
11 !$omp do collapse (2)
12 do i = 1, 64
13 block
14 integer :: v
15 v = (i + 4) * 2
16 do j = v, 64 ! { dg-error "loop start expression at .1. uses variable bound in intervening code" }
17 call foo (i, j)
18 end do
19 end block
20 end do
21 end subroutine
23 subroutine f2 ()
24 integer :: i, j
26 !$omp do collapse (2)
27 do i = 1, 64
28 block
29 integer :: v
30 v = (i + 4) * 2
31 do j = 1, v ! { dg-error "loop end expression at .1. uses variable bound in intervening code" }
32 call foo (i, j)
33 end do
34 end block
35 end do
36 end subroutine
38 subroutine f3 ()
39 integer :: i, j
41 !$omp do collapse (2)
42 do i = 1, 64
43 block
44 integer :: v
45 v = (i + 4) * 2
46 do j = 1, 64, v ! { dg-error "loop increment expression at .1. uses variable bound in intervening code" }
47 call foo (i, j)
48 end do
49 end block
50 end do
51 end subroutine
53 subroutine f4 ()
54 integer :: i
56 !$omp do collapse (2)
57 do i = 1, 64
58 block
59 integer :: j
60 do j = 1, 64 ! { dg-error "iteration variable at .1. is bound in intervening code" }
61 call foo (i, j)
62 end do
63 end block
64 end do
65 end subroutine
67 subroutine f5 ()
68 integer :: i
70 !$omp do collapse (2)
71 do i = 1, 64
72 block
73 integer :: j
74 integer :: v
75 v = (i + 4) * 2
76 do j = v, 64 ! { dg-error "iteration variable at .1. is bound in intervening code" }
77 call foo (i, j)
78 end do
79 end block
80 end do
81 end subroutine