annotate gcc/testsuite/g++.dg/tree-ssa/pr90078.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 // { dg-do compile }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-options "-std=c++14 -O2 -ftemplate-depth=1000000" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 template <class T, int Dim0, int Dim1, int Dim2> struct Tensor3;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 template <class A, class T, int Dim0, int Dim1, int Dim2, char i, char j,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 char k>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 struct Tensor3_Expr;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 template <class T, int Dim0, int Dim1, int Dim2, int Dim3> struct Tensor4;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 template <class A, class T, int Dim0, int Dim1, int Dim2, int Dim3, char i,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 char j, char k, char l>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 struct Tensor4_Expr;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 template <char i, int Dim> struct Index
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 {};
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 template <const int N> struct Number
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 Number(){};
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 operator int() const { return N; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 template <class T, int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 struct Tensor3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 T data[Tensor_Dim0][Tensor_Dim1][Tensor_Dim2];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 T operator()(const int N1, const int N2, const int N3) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 return data[N1][N2][N3];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 template <char i, char j, char k, int Dim0, int Dim1, int Dim2>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 Tensor3_Expr<const Tensor3<T, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2>, T,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 Dim0, Dim1, Dim2, i, j, k>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 operator()(const Index<i, Dim0>, const Index<j, Dim1>,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 const Index<k, Dim2>) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 return Tensor3_Expr<const Tensor3<T, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2>,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 T, Dim0, Dim1, Dim2, i, j, k>(*this);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 template <class A, class T, int Dim0, int Dim1, int Dim2, char i, char j,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 char k>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 struct Tensor3_Expr
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 A iter;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 Tensor3_Expr(const A &a) : iter(a) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 T operator()(const int N1, const int N2, const int N3) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 return iter(N1, N2, N3);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 template <class A, class T, int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 int Dim0, int Dim1, int Dim2, char i, char j, char k>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 struct Tensor3_Expr<Tensor3<A, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2>, T, Dim0,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 Dim1, Dim2, i, j, k>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 Tensor3<A, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2> &iter;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 Tensor3_Expr(Tensor3<A, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2> &a) : iter(a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 T operator()(const int N1, const int N2, const int N3) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 return iter(N1, N2, N3);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim23,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 int Dim4, int Dim5, char i, char j, char k, char l, char m>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 struct Tensor3_times_Tensor3_21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 Tensor3_Expr<A, T, Dim0, Dim1, Dim23, i, j, k> iterA;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 Tensor3_Expr<B, U, Dim23, Dim4, Dim5, k, l, m> iterB;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 template <int CurrentDim>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 T eval(const int N1, const int N2, const int N3, const int N4,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 const Number<CurrentDim> &) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 return iterA(N1, N2, CurrentDim - 1) * iterB(CurrentDim - 1, N3, N4)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 + eval(N1, N2, N3, N4, Number<CurrentDim - 1>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 T eval(const int N1, const int N2, const int N3, const int N4,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 const Number<1> &) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 return iterA(N1, N2, 0) * iterB(0, N3, N4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 Tensor3_times_Tensor3_21(
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 const Tensor3_Expr<A, T, Dim0, Dim1, Dim23, i, j, k> &a,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 const Tensor3_Expr<B, U, Dim23, Dim4, Dim5, k, l, m> &b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 : iterA(a), iterB(b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 T operator()(const int &N1, const int &N2, const int &N3,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 const int &N4) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 return eval(N1, N2, N3, N4, Number<Dim23>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 template <class A, class B, class T, class U, int Dim0, int Dim1, int Dim23,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 int Dim4, int Dim5, char i, char j, char k, char l, char m>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 Tensor4_Expr<Tensor3_times_Tensor3_21<A, B, T, U, Dim0, Dim1, Dim23, Dim4,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 Dim5, i, j, k, l, m>,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 T, Dim0, Dim1, Dim4, Dim5, i, j, l, m>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 operator*(const Tensor3_Expr<A, T, Dim0, Dim1, Dim23, i, j, k> &a,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 const Tensor3_Expr<B, U, Dim23, Dim4, Dim5, k, l, m> &b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 using TensorExpr = Tensor3_times_Tensor3_21<A, B, T, U, Dim0, Dim1, Dim23,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 Dim4, Dim5, i, j, k, l, m>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 return Tensor4_Expr<TensorExpr, T, Dim0, Dim1, Dim4, Dim5, i, j, l, m>(
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 TensorExpr(a, b));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 template <class T, int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 int Tensor_Dim3>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 struct Tensor4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 T data[Tensor_Dim0][Tensor_Dim1][Tensor_Dim2][Tensor_Dim3];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 Tensor4() {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 T &operator()(const int N1, const int N2, const int N3, const int N4)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 return data[N1][N2][N3][N4];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 template <char i, char j, char k, char l, int Dim0, int Dim1, int Dim2,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 int Dim3>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 Tensor4_Expr<Tensor4<T, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3>,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 T, Dim0, Dim1, Dim2, Dim3, i, j, k, l>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 operator()(const Index<i, Dim0>, const Index<j, Dim1>, const Index<k, Dim2>,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 const Index<l, Dim3>)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 return Tensor4_Expr<
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 Tensor4<T, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3>, T, Dim0,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 Dim1, Dim2, Dim3, i, j, k, l>(*this);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 template <class A, class T, int Dim0, int Dim1, int Dim2, int Dim3, char i,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 char j, char k, char l>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 struct Tensor4_Expr
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 A iter;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 Tensor4_Expr(const A &a) : iter(a) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 T operator()(const int N1, const int N2, const int N3, const int N4) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 return iter(N1, N2, N3, N4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 template <class A, class T, int Dim0, int Dim1, int Dim2, int Dim3, char i,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 char j, char k, char l>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 struct Tensor4_Expr<Tensor4<A, Dim0, Dim1, Dim2, Dim3>, T, Dim0, Dim1, Dim2,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 Dim3, i, j, k, l>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 Tensor4<A, Dim0, Dim1, Dim2, Dim3> &iter;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 Tensor4_Expr(Tensor4<A, Dim0, Dim1, Dim2, Dim3> &a) : iter(a) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 T operator()(const int N1, const int N2, const int N3, const int N4) const
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 return iter(N1, N2, N3, N4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 template <class B, class U, int Dim1_0, int Dim1_1, int Dim1_2, int Dim1_3,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 char i_1, char j_1, char k_1, char l_1>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 auto &operator=(const Tensor4_Expr<B, U, Dim1_0, Dim1_1, Dim1_2, Dim1_3, i_1,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 j_1, k_1, l_1> &rhs)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 for(int ii = 0; ii < Dim0; ++ii)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 for(int jj = 0; jj < Dim1; ++jj)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 for(int kk = 0; kk < Dim2; ++kk)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 for(int ll = 0; ll < Dim3; ++ll)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 iter(ii, jj, kk, ll) = rhs(ii, jj, kk, ll);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 return *this;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 int main()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 Tensor3<float, 100, 100, 1000> t1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 Tensor3<float, 1000, 100, 100> t2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 Index<'l', 100> l;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 Index<'m', 100> m;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 Index<'k', 1000> k;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 Index<'n', 100> n;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 Index<'o', 100> o;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 Tensor4<float, 100, 100, 100, 100> res;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 res(l, m, n, o) = t1(l, m, k) * t2(k, n, o);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199