1! { dg-do compile }
2! { dg-options "-std=f95 -fmax-errors=0" }
3!
4! Testcases from PR fortran/24978
5!
6
7SUBROUTINE data_init_scalar_invalid()
8  integer :: a
9  data       a / 1 /
10  data       a / 1 /                             ! { dg-error "re-initialization" }
11
12  integer :: b = 0
13  data       b / 1 /                             ! { dg-error "re-initialization" }
14END SUBROUTINE
15
16SUBROUTINE data_init_array_invalid()
17  ! initialize (at least) one element, re-initialize full array
18  integer :: a(3)
19  data       a(2) / 2 /
20  data       a    / 3*1 /                        ! { dg-error "re-initialization" }
21
22  ! initialize (at least) one element, re-initialize subsection including the element
23  integer :: b(3)
24  data       b(2)   / 2 /
25  data       b(1:2) / 2*1 /                      ! { dg-error "re-initialization" }
26
27  ! initialize subsection, re-initialize (intersecting) subsection
28  integer :: c(3)
29  data       c(1:2) / 2*1 /
30  data       c(2:3) / 1,1 /                      ! { dg-error "re-initialization" }
31
32  ! initialize subsection, re-initialize full array
33  integer :: d(3)
34  data       d(2:3) / 2*1 /
35  data       d      / 2*2, 3 /                   ! { dg-error "re-initialization" }
36
37  ! full array initializer, re-initialize (at least) one element
38  integer :: e(3)
39  data       e    / 3*1 /
40  data       e(2) / 2 /                          ! { dg-error "re-initialization" }
41
42  integer :: f(3) = 0                            ! { dg-error "already is initialized" }
43  data       f(2) / 1 /
44
45  ! full array initializer, re-initialize subsection
46  integer :: g(3)
47  data       g      / 3*1 /
48  data       g(1:2) / 2*2 /                      ! { dg-error "re-initialization" }
49
50  integer :: h(3) = 1                            ! { dg-error "already is initialized" }
51  data       h(2:3) / 2*2 /
52
53  ! full array initializer, re-initialize full array
54  integer :: i(3)
55  data       i   / 3*1 /
56  data       i   / 2,2,2 /                       ! { dg-error "re-initialization" }
57
58  integer :: j(3) = 1                            ! { dg-error "already is initialized" }
59  data       j   / 3*2 /
60END SUBROUTINE
61
62SUBROUTINE data_init_matrix_invalid()
63  ! initialize (at least) one element, re-initialize full matrix
64  integer :: a(3,3)
65  data       a(2,2) / 1 /
66  data       a      / 9*2 /                      ! { dg-error "re-initialization" }
67
68  ! initialize (at least) one element, re-initialize subsection
69  integer :: b(3,3)
70  data       b(2,2) / 1 /
71  data       b(2,:) / 3*2 /                      ! { dg-error "re-initialization" }
72
73  ! initialize subsection, re-initialize (intersecting) subsection
74  integer :: c(3,3)
75  data       c(3,:) / 3*1 /, c(:,3) / 3*2 /      ! { dg-error "re-initialization" }
76
77  ! initialize subsection, re-initialize full array
78  integer :: d(3,3)
79  data       d(2,:) / 1,2,3 /
80  data       d      / 9*4 /                      ! { dg-error "re-initialization" }
81
82  ! full array initializer, re-initialize (at least) one element
83  integer :: e(3,3)
84  data       e      / 9*1 /
85  data       e(2,3) / 2 /                        ! { dg-error "re-initialization" }
86
87  integer :: f(3,3) = 1                          ! { dg-error "already is initialized" }
88  data       f(3,2) / 2 /
89
90  ! full array initializer, re-initialize subsection
91  integer :: g(3,3)
92  data       g          / 9 * 1 /
93  data       g(2:3,2:3) / 2, 2*3, 4 /            ! { dg-error "re-initialization" }
94
95  integer :: h(3,3) = 1                          ! { dg-error "already is initialized" }
96  data       h(2:3,2:3) / 2, 2*3, 4 /
97
98  ! full array initializer, re-initialize full array
99  integer :: i(3,3)
100  data       i   / 3*1, 3*2, 3*3 /
101  data       i   / 9 * 1 /                       ! { dg-error "re-initialization" }
102
103  integer :: j(3,3) = 0                          ! { dg-error "already is initialized" }
104  data       j   / 9 * 1 /
105END SUBROUTINE
106
107SUBROUTINE data_init_misc_invalid()
108  ! wrong number of dimensions
109  integer :: a(3)
110  data       a(1,1) / 1 /                        ! { dg-error "Rank mismatch" }
111
112  ! index out-of-bounds, direct access
113  integer :: b(3)
114  data       b(-2) / 1 /                         ! { dg-error "below array lower bound" }
115
116  ! index out-of-bounds, implied do-loop (PR32315)
117  integer :: i
118  character(len=20), dimension(4) :: string
119  data (string(i), i = 1, 5) / 'A', 'B', 'C', 'D', 'E' /   ! { dg-error "above array upper bound" }
120END SUBROUTINE
121
122! { dg-excess-errors "" }
123