1 /*
2 * %CopyrightBegin%
3 *
4 * Copyright Ericsson AB and Kjell Winblad 2019. All Rights Reserved.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * %CopyrightEnd%
19 */
20
21 /*
22 * Description:
23 *
24 * Author: Kjell Winblad
25 *
26 */
27
28 #include <stdio.h>
29 #include <stdlib.h>
30
31 #define YCF_YIELD()
32
33
fun(char x)34 int fun(char x){
35 YCF_YIELD();
36 if(x == 1){
37 /*empty control statement*/
38 } else {
39 /* another empty*/
40 }
41 if(x == 1){
42
43 } else {
44
45 }
46 if(x == 1){
47 int y = 4;
48 YCF_YIELD();
49 printf("s_1 %d %d\n", x, y);
50 }
51 YCF_YIELD();
52 if(x == 1){
53 int y = 4;
54 YCF_YIELD();
55 printf("s_2 %d %d\n", x, y);
56 }else printf("Hej\n");
57 YCF_YIELD();
58 if(x == 1){
59 int y = 4;
60 YCF_YIELD();
61 printf("s_3 %d %d\n", x, y);
62 }else if(x == 1){
63 int y = 4;
64 printf("Hej %d %d\n", x, y);
65 }
66 YCF_YIELD();
67 if(x == 2){
68 int y = 4;
69 printf("Hej %d %d\n", x, y);
70 }else if(x == 1){
71 int y = 4;
72 YCF_YIELD();
73 printf("s_4 %d %d\n", x, y);
74 }
75 YCF_YIELD();
76 if(x == 2){
77 int y = 4;
78 printf("Hej %d %d\n", x, y);
79 }else{
80 int y = 4;
81 YCF_YIELD();
82 printf("s_5 %d %d\n", x, y);
83 }
84 YCF_YIELD();
85 while(x == 1) {
86 int y = 4;
87 x = 2;
88 YCF_YIELD();
89 printf("s_6 %d %d\n", x, y);
90 }
91 YCF_YIELD();
92 x = 1;
93 YCF_YIELD();
94 do x++; while(x == 1);
95 YCF_YIELD();
96 printf("s_7 %d\n", x);
97 YCF_YIELD();
98 x = 1;
99 do {
100 int y = 4;
101 YCF_YIELD();
102 printf("s_8 %d %d\n", x, y);
103 YCF_YIELD();
104 x++;
105 } while(x == 2);
106 YCF_YIELD();
107 x = 1;
108 YCF_YIELD();
109 while(x==1){
110 int y = 4;
111 YCF_YIELD();
112 printf("s_9 %d %d\n", x, y);
113 YCF_YIELD();
114 x++;
115 }
116 YCF_YIELD();
117 x = 2;
118 for(;;){
119 int y = 4;
120 YCF_YIELD();
121 printf("s_10 %d %d\n", x, y);
122 YCF_YIELD();
123 break;
124 }
125 YCF_YIELD();
126 for(x = 0;x < 10;x++){
127 int y = 4;
128 YCF_YIELD();
129 printf("s_11 %d %d\n", x, y);
130 }
131 YCF_YIELD();
132 x = 42;
133 YCF_YIELD();
134 switch(x){
135 int y;
136 case 42:
137 y = 4;
138 YCF_YIELD();
139 printf("s_12 %d %d\n", x, y);
140 YCF_YIELD();
141 }
142 YCF_YIELD();
143 {
144 x = 1;
145 YCF_YIELD();
146 if(x == 1) if(1){
147 int y = 4;
148 YCF_YIELD();
149 printf("s_1 %d %d\n", x, y);
150 }
151 YCF_YIELD();
152 if(x == 1) switch(1){
153 int y;
154 case 1:;
155 y = 4;
156 YCF_YIELD();
157 printf("s_2 %d %d\n", x, y);
158 }else printf("Hej\n");
159 YCF_YIELD();
160 if(x == 1) switch(1){
161 int y;
162 case 1:;
163 y = 4;
164 YCF_YIELD();
165 printf("s_3 %d %d\n", x, y);
166 }else if(x == 1){
167 int y = 4;
168 printf("Hej %d %d\n", x, y);
169 }
170 YCF_YIELD();
171 if(x == 2){
172 int y = 4;
173 printf("Hej %d %d\n", x, y);
174 }else if(x == 1) if(1){
175 int y = 4;
176 YCF_YIELD();
177 printf("s_4 %d %d\n", x, y);
178 }
179 YCF_YIELD();
180 if(x == 2){
181 int y = 4;
182 printf("Hej %d %d\n", x, y);
183 }else if(1){
184 int y = 4;
185 YCF_YIELD();
186 printf("s_5 %d %d\n", x, y);
187 }
188 YCF_YIELD();
189 while(x == 1) if(1) {
190 int y = 4;
191 x = 2;
192 YCF_YIELD();
193 printf("s_6 %d %d\n", x, y);
194 }
195 YCF_YIELD();
196 x = 1;
197 YCF_YIELD();
198 do if(1) x++; while(x == 1);
199 YCF_YIELD();
200 printf("s_7 %d\n", x);
201 YCF_YIELD();
202 x = 1;
203 do if(1){
204 int y = 4;
205 YCF_YIELD();
206 printf("s_8 %d %d\n", x, y);
207 YCF_YIELD();
208 x++;
209 } while(x == 2);
210 YCF_YIELD();
211 x = 1;
212 YCF_YIELD();
213 while(x==1) if(1){
214 int y = 4;
215 YCF_YIELD();
216 printf("s_9 %d %d\n", x, y);
217 YCF_YIELD();
218 x++;
219 }
220 YCF_YIELD();
221 x = 2;
222 for(;;) if(1){
223 int y = 4;
224 YCF_YIELD();
225 printf("s_10 %d %d\n", x, y);
226 YCF_YIELD();
227 break;
228 }
229 YCF_YIELD();
230 for(x = 0;x < 10;x++) if(1){
231 int y = 4;
232 YCF_YIELD();
233 printf("s_11 %d %d\n", x, y);
234 }
235 YCF_YIELD();
236 x = 42;
237 YCF_YIELD();
238 switch(x){
239 int y;
240 case 42:
241 y = 4;
242 YCF_YIELD();
243 printf("s_12 %d %d\n", x, y);
244 YCF_YIELD();
245 }
246 YCF_YIELD();
247 }
248 return x;
249 }
250
allocator(size_t size,void * context)251 void* allocator(size_t size, void* context){
252 (void)context;
253 return malloc(size);
254 }
255
freer(void * data,void * context)256 void freer(void* data, void* context){
257 (void)context;
258 free(data);
259 }
260
main(int argc,const char * argv[])261 int main( int argc, const char* argv[] )
262 {
263 #ifdef YCF_YIELD_CODE_GENERATED
264 void* wb = NULL;
265 #endif
266 int ret = 0;
267 int nr_of_trapps = 0;
268 long nr_of_reductions = 1;
269 #ifdef YCF_YIELD_CODE_GENERATED
270 do{
271 ret = fun_ycf_gen_yielding(&nr_of_reductions,&wb,NULL,allocator,freer,NULL,0,NULL,1);
272 if(wb != NULL){
273 nr_of_trapps++;
274 }
275 }while(wb != NULL);
276 if(wb != NULL){
277 free(wb);
278 }
279 #else
280 ret = fun(1);
281 nr_of_trapps = 86;
282 #endif
283 printf("RETURNED %d %d\n", ret, nr_of_trapps);
284 if(ret != 42){
285 return 1;
286 }else{
287 return 0;
288 }
289 }
290