1
+ #include "memcheck.h"
1
2
#include "runtime.h"
2
3
3
4
enum OptT0_kind { SomeT0_tag , NoneT0_tag };
@@ -19,7 +20,11 @@ struct T0 {
19
20
int addedPCR ;
20
21
enum T0_kind kind ;
21
22
void (* print )();
23
+ struct OptT0 * f1 ;
24
+ struct OptT0 * f3 ;
22
25
struct OptT0 * f0 ;
26
+ struct OptT0 * f4 ;
27
+ struct OptT0 * f2 ;
23
28
union {
24
29
struct { };
25
30
};
@@ -40,7 +45,7 @@ void $print_OptT0(struct OptT0* this);
40
45
void $print_T0 (struct T0 * this );
41
46
struct OptT0 * new$SomeT0 (struct T0 * value );
42
47
struct OptT0 * new$NoneT0 ();
43
- struct T0 * new$T0 (struct OptT0 * f0 );
48
+ struct T0 * new$T0 (struct OptT0 * f0 , struct OptT0 * f1 , struct OptT0 * f2 , struct OptT0 * f3 , struct OptT0 * f4 );
44
49
int main ();
45
50
void $free_OptT0 (struct OptT0 * this ) {
46
51
fprintf (stderr , "Freeing OptT0\n" );
@@ -86,7 +91,11 @@ void $decr_T0(struct T0* this) {
86
91
if (-- this -> rc == 0 ) {
87
92
switch (this -> kind ) {
88
93
case T0_tag :
94
+ $decr_OptT0 (this -> f1 );
95
+ $decr_OptT0 (this -> f3 );
89
96
$decr_OptT0 (this -> f0 );
97
+ $decr_OptT0 (this -> f4 );
98
+ $decr_OptT0 (this -> f2 );
90
99
break ;
91
100
}
92
101
removePCR ((void * ) this , 0 );
@@ -117,8 +126,16 @@ void $markGray_T0(struct T0* this) {
117
126
this -> color = kGray ;
118
127
switch (this -> kind ) {
119
128
case T0_tag :
129
+ this -> f1 -> rc -- ;
130
+ $markGray_OptT0 (this -> f1 );
131
+ this -> f3 -> rc -- ;
132
+ $markGray_OptT0 (this -> f3 );
120
133
this -> f0 -> rc -- ;
121
134
$markGray_OptT0 (this -> f0 );
135
+ this -> f4 -> rc -- ;
136
+ $markGray_OptT0 (this -> f4 );
137
+ this -> f2 -> rc -- ;
138
+ $markGray_OptT0 (this -> f2 );
122
139
break ;
123
140
}
124
141
}
@@ -146,7 +163,11 @@ void $scan_T0(struct T0* this) {
146
163
this -> color = kWhite ;
147
164
switch (this -> kind ) {
148
165
case T0_tag :
166
+ $scan_OptT0 (this -> f1 );
167
+ $scan_OptT0 (this -> f3 );
149
168
$scan_OptT0 (this -> f0 );
169
+ $scan_OptT0 (this -> f4 );
170
+ $scan_OptT0 (this -> f2 );
150
171
break ;
151
172
}
152
173
}
@@ -168,8 +189,16 @@ void $scanBlack_T0(struct T0* this) {
168
189
this -> color = kBlack ;
169
190
switch (this -> kind ) {
170
191
case T0_tag :
192
+ this -> f1 -> rc ++ ;
193
+ $scanBlack_OptT0 (this -> f1 );
194
+ this -> f3 -> rc ++ ;
195
+ $scanBlack_OptT0 (this -> f3 );
171
196
this -> f0 -> rc ++ ;
172
197
$scanBlack_OptT0 (this -> f0 );
198
+ this -> f4 -> rc ++ ;
199
+ $scanBlack_OptT0 (this -> f4 );
200
+ this -> f2 -> rc ++ ;
201
+ $scanBlack_OptT0 (this -> f2 );
173
202
break ;
174
203
}
175
204
}
@@ -197,7 +226,11 @@ void $collectWhite_T0(struct T0* this) {
197
226
this -> color = kBlack ;
198
227
switch (this -> kind ) {
199
228
case T0_tag :
229
+ $collectWhite_OptT0 (this -> f1 );
230
+ $collectWhite_OptT0 (this -> f3 );
200
231
$collectWhite_OptT0 (this -> f0 );
232
+ $collectWhite_OptT0 (this -> f4 );
233
+ $collectWhite_OptT0 (this -> f2 );
201
234
break ;
202
235
}
203
236
fprintf (stderr , "Removing T0\n" );
@@ -227,9 +260,21 @@ void $print_T0(struct T0* this) {
227
260
switch (this -> kind ) {
228
261
case T0_tag :
229
262
printf ("T0 {" );
263
+ printf ("f1=" );
264
+ $print_OptT0 (this -> f1 );
265
+ printf (", " );
266
+ printf ("f3=" );
267
+ $print_OptT0 (this -> f3 );
268
+ printf (", " );
230
269
printf ("f0=" );
231
270
$print_OptT0 (this -> f0 );
232
271
printf (", " );
272
+ printf ("f4=" );
273
+ $print_OptT0 (this -> f4 );
274
+ printf (", " );
275
+ printf ("f2=" );
276
+ $print_OptT0 (this -> f2 );
277
+ printf (", " );
233
278
printf ("}" );
234
279
break ;
235
280
}
@@ -254,55 +299,203 @@ struct OptT0* new$NoneT0() {
254
299
$res -> kind = NoneT0_tag ;
255
300
return $res ;
256
301
}
257
- struct T0 * new$T0 (struct OptT0 * f0 ) {
302
+ struct T0 * new$T0 (struct OptT0 * f0 , struct OptT0 * f1 , struct OptT0 * f2 , struct OptT0 * f3 , struct OptT0 * f4 ) {
258
303
struct T0 * $res = malloc (sizeof (struct T0 ));
259
304
$res -> rc = 0 ;
260
305
$res -> color = kBlack ;
261
306
$res -> addedPCR = 0 ;
262
307
$res -> print = $print_T0 ;
263
308
$res -> kind = T0_tag ;
309
+ $res -> f1 = f1 ;
310
+ $res -> f1 -> rc ++ ;
311
+ $res -> f3 = f3 ;
312
+ $res -> f3 -> rc ++ ;
264
313
$res -> f0 = f0 ;
265
314
$res -> f0 -> rc ++ ;
315
+ $res -> f4 = f4 ;
316
+ $res -> f4 -> rc ++ ;
317
+ $res -> f2 = f2 ;
318
+ $res -> f2 -> rc ++ ;
266
319
return $res ;
267
320
}
268
321
int main () {
269
- struct T0 * vT0_0 = new$T0 (new$NoneT0 ());
270
- vT0_0 -> rc ++ ;
271
- struct T0 * vT0_2 = new$T0 (new$NoneT0 ());
272
- vT0_2 -> rc ++ ;
273
- struct T0 * vT0_1 = new$T0 (new$NoneT0 ());
274
- vT0_1 -> rc ++ ;
275
- struct T0 * vT0_6 = new$T0 (new$NoneT0 ());
276
- vT0_6 -> rc ++ ;
277
- struct T0 * vT0_5 = new$T0 (new$NoneT0 ());
322
+ struct T0 * vT0_5 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
278
323
vT0_5 -> rc ++ ;
279
- struct T0 * vT0_3 = new$T0 (new$NoneT0 ());
280
- vT0_3 -> rc ++ ;
281
- struct T0 * vT0_4 = new$T0 (new$NoneT0 ());
324
+ struct T0 * vT0_12 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
325
+ vT0_12 -> rc ++ ;
326
+ struct T0 * vT0_11 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
327
+ vT0_11 -> rc ++ ;
328
+ struct T0 * vT0_0 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
329
+ vT0_0 -> rc ++ ;
330
+ struct T0 * vT0_4 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
282
331
vT0_4 -> rc ++ ;
283
- struct OptT0 * oldValue$0 = vT0_5 -> f0 ;
284
- vT0_5 -> f0 = new$SomeT0 (vT0_6 );
285
- vT0_5 -> f0 -> rc ++ ;
332
+ struct T0 * vT0_3 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
333
+ vT0_3 -> rc ++ ;
334
+ struct T0 * vT0_7 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
335
+ vT0_7 -> rc ++ ;
336
+ struct T0 * vT0_9 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
337
+ vT0_9 -> rc ++ ;
338
+ struct T0 * vT0_6 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
339
+ vT0_6 -> rc ++ ;
340
+ struct T0 * vT0_10 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
341
+ vT0_10 -> rc ++ ;
342
+ struct T0 * vT0_8 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
343
+ vT0_8 -> rc ++ ;
344
+ struct T0 * vT0_1 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
345
+ vT0_1 -> rc ++ ;
346
+ struct T0 * vT0_2 = new$T0 (new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 (), new$NoneT0 ());
347
+ vT0_2 -> rc ++ ;
348
+ struct OptT0 * oldValue$0 = vT0_1 -> f1 ;
349
+ vT0_1 -> f1 = new$SomeT0 (vT0_8 );
350
+ vT0_1 -> f1 -> rc ++ ;
286
351
$decr_OptT0 (oldValue$0 );
287
- struct OptT0 * oldValue$1 = vT0_0 -> f0 ;
288
- vT0_0 -> f0 = new$SomeT0 (vT0_0 );
289
- vT0_0 -> f0 -> rc ++ ;
352
+ struct OptT0 * oldValue$1 = vT0_12 -> f2 ;
353
+ vT0_12 -> f2 = new$SomeT0 (vT0_12 );
354
+ vT0_12 -> f2 -> rc ++ ;
290
355
$decr_OptT0 (oldValue$1 );
291
- struct OptT0 * oldValue$2 = vT0_3 -> f0 ;
292
- vT0_3 -> f0 = new$SomeT0 (vT0_5 );
293
- vT0_3 -> f0 -> rc ++ ;
356
+ struct OptT0 * oldValue$2 = vT0_11 -> f2 ;
357
+ vT0_11 -> f2 = new$SomeT0 (vT0_3 );
358
+ vT0_11 -> f2 -> rc ++ ;
294
359
$decr_OptT0 (oldValue$2 );
295
- vT0_3 -> f0 ;
296
- vT0_0 -> f0 ;
297
- vT0_5 -> f0 ;
298
- int ret$3 = 0 ;
299
- $decr_T0 (vT0_4 );
300
- $decr_T0 (vT0_3 );
301
- $decr_T0 (vT0_5 );
302
- $decr_T0 (vT0_6 );
303
- $decr_T0 (vT0_1 );
304
- $decr_T0 (vT0_2 );
305
- $decr_T0 (vT0_0 );
360
+ struct OptT0 * oldValue$3 = vT0_5 -> f0 ;
361
+ vT0_5 -> f0 = new$SomeT0 (vT0_8 );
362
+ vT0_5 -> f0 -> rc ++ ;
363
+ $decr_OptT0 (oldValue$3 );
364
+ struct OptT0 * oldValue$4 = vT0_6 -> f0 ;
365
+ vT0_6 -> f0 = new$SomeT0 (vT0_8 );
366
+ vT0_6 -> f0 -> rc ++ ;
367
+ $decr_OptT0 (oldValue$4 );
368
+ struct OptT0 * oldValue$5 = vT0_9 -> f2 ;
369
+ vT0_9 -> f2 = new$SomeT0 (vT0_9 );
370
+ vT0_9 -> f2 -> rc ++ ;
371
+ $decr_OptT0 (oldValue$5 );
372
+ struct OptT0 * oldValue$6 = vT0_6 -> f2 ;
373
+ vT0_6 -> f2 = new$SomeT0 (vT0_8 );
374
+ vT0_6 -> f2 -> rc ++ ;
375
+ $decr_OptT0 (oldValue$6 );
376
+ struct OptT0 * oldValue$7 = vT0_2 -> f2 ;
377
+ vT0_2 -> f2 = new$SomeT0 (vT0_0 );
378
+ vT0_2 -> f2 -> rc ++ ;
379
+ $decr_OptT0 (oldValue$7 );
380
+ struct OptT0 * oldValue$8 = vT0_0 -> f1 ;
381
+ vT0_0 -> f1 = new$SomeT0 (vT0_7 );
382
+ vT0_0 -> f1 -> rc ++ ;
383
+ $decr_OptT0 (oldValue$8 );
384
+ struct OptT0 * oldValue$9 = vT0_7 -> f2 ;
385
+ vT0_7 -> f2 = new$SomeT0 (vT0_5 );
386
+ vT0_7 -> f2 -> rc ++ ;
387
+ $decr_OptT0 (oldValue$9 );
388
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
389
+ struct OptT0 * oldValue$10 = vT0_8 -> f1 ;
390
+ vT0_8 -> f1 = new$SomeT0 (vT0_2 );
391
+ vT0_8 -> f1 -> rc ++ ;
392
+ $decr_OptT0 (oldValue$10 );
393
+ struct OptT0 * oldValue$11 = vT0_4 -> f2 ;
394
+ vT0_4 -> f2 = new$SomeT0 (vT0_5 );
395
+ vT0_4 -> f2 -> rc ++ ;
396
+ $decr_OptT0 (oldValue$11 );
397
+ struct OptT0 * oldValue$12 = vT0_10 -> f1 ;
398
+ vT0_10 -> f1 = new$SomeT0 (vT0_11 );
399
+ vT0_10 -> f1 -> rc ++ ;
400
+ $decr_OptT0 (oldValue$12 );
401
+ struct OptT0 * oldValue$13 = vT0_12 -> f1 ;
402
+ vT0_12 -> f1 = new$SomeT0 (vT0_0 );
403
+ vT0_12 -> f1 -> rc ++ ;
404
+ $decr_OptT0 (oldValue$13 );
405
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
406
+ struct OptT0 * oldValue$14 = vT0_1 -> f2 ;
407
+ vT0_1 -> f2 = new$SomeT0 (vT0_10 );
408
+ vT0_1 -> f2 -> rc ++ ;
409
+ $decr_OptT0 (oldValue$14 );
410
+ struct OptT0 * oldValue$15 = vT0_4 -> f1 ;
411
+ vT0_4 -> f1 = new$SomeT0 (vT0_6 );
412
+ vT0_4 -> f1 -> rc ++ ;
413
+ $decr_OptT0 (oldValue$15 );
414
+ struct OptT0 * oldValue$16 = vT0_10 -> f2 ;
415
+ vT0_10 -> f2 = new$SomeT0 (vT0_5 );
416
+ vT0_10 -> f2 -> rc ++ ;
417
+ $decr_OptT0 (oldValue$16 );
418
+ struct OptT0 * oldValue$17 = vT0_2 -> f1 ;
419
+ vT0_2 -> f1 = new$SomeT0 (vT0_12 );
420
+ vT0_2 -> f1 -> rc ++ ;
421
+ $decr_OptT0 (oldValue$17 );
422
+ struct OptT0 * oldValue$18 = vT0_12 -> f0 ;
423
+ vT0_12 -> f0 = new$SomeT0 (vT0_11 );
424
+ vT0_12 -> f0 -> rc ++ ;
425
+ $decr_OptT0 (oldValue$18 );
426
+ struct OptT0 * oldValue$19 = vT0_2 -> f4 ;
427
+ vT0_2 -> f4 = new$SomeT0 (vT0_1 );
428
+ vT0_2 -> f4 -> rc ++ ;
429
+ $decr_OptT0 (oldValue$19 );
430
+ ; $decr_T0 (vT0_1 );
431
+ struct OptT0 * oldValue$20 = vT0_5 -> f1 ;
432
+ vT0_5 -> f1 = new$SomeT0 (vT0_7 );
433
+ vT0_5 -> f1 -> rc ++ ;
434
+ $decr_OptT0 (oldValue$20 );
435
+ ; $decr_T0 (vT0_7 );
436
+ struct OptT0 * oldValue$21 = vT0_0 -> f4 ;
437
+ vT0_0 -> f4 = new$SomeT0 (vT0_2 );
438
+ vT0_0 -> f4 -> rc ++ ;
439
+ $decr_OptT0 (oldValue$21 );
440
+ struct OptT0 * oldValue$22 = vT0_3 -> f4 ;
441
+ vT0_3 -> f4 = new$SomeT0 (vT0_12 );
442
+ vT0_3 -> f4 -> rc ++ ;
443
+ $decr_OptT0 (oldValue$22 );
444
+ struct OptT0 * oldValue$23 = vT0_4 -> f3 ;
445
+ vT0_4 -> f3 = new$SomeT0 (vT0_12 );
446
+ vT0_4 -> f3 -> rc ++ ;
447
+ $decr_OptT0 (oldValue$23 );
448
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
449
+ struct OptT0 * oldValue$24 = vT0_12 -> f4 ;
450
+ vT0_12 -> f4 = new$SomeT0 (vT0_5 );
451
+ vT0_12 -> f4 -> rc ++ ;
452
+ $decr_OptT0 (oldValue$24 );
453
+ ; $decr_T0 (vT0_12 );
454
+ struct OptT0 * oldValue$25 = vT0_9 -> f1 ;
455
+ vT0_9 -> f1 = new$SomeT0 (vT0_11 );
456
+ vT0_9 -> f1 -> rc ++ ;
457
+ $decr_OptT0 (oldValue$25 );
458
+ ; $decr_T0 (vT0_9 );
459
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
460
+ ; $decr_T0 (vT0_11 );
461
+ struct OptT0 * oldValue$26 = vT0_5 -> f2 ;
462
+ vT0_5 -> f2 = new$SomeT0 (vT0_4 );
463
+ vT0_5 -> f2 -> rc ++ ;
464
+ $decr_OptT0 (oldValue$26 );
465
+ ; $decr_T0 (vT0_5 );
466
+ struct OptT0 * oldValue$27 = vT0_4 -> f4 ;
467
+ vT0_4 -> f4 = new$SomeT0 (vT0_6 );
468
+ vT0_4 -> f4 -> rc ++ ;
469
+ $decr_OptT0 (oldValue$27 );
470
+ ; $decr_T0 (vT0_4 );
471
+ ; $decr_T0 (vT0_6 );
472
+ struct OptT0 * oldValue$28 = vT0_3 -> f1 ;
473
+ vT0_3 -> f1 = new$SomeT0 (vT0_10 );
474
+ vT0_3 -> f1 -> rc ++ ;
475
+ $decr_OptT0 (oldValue$28 );
476
+ ; $decr_T0 (vT0_10 );
477
+ struct OptT0 * oldValue$29 = vT0_8 -> f2 ;
478
+ vT0_8 -> f2 = new$SomeT0 (vT0_8 );
479
+ vT0_8 -> f2 -> rc ++ ;
480
+ $decr_OptT0 (oldValue$29 );
481
+ ; $decr_T0 (vT0_8 );
482
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
483
+ ; $decr_T0 (vT0_8 );
484
+ struct OptT0 * oldValue$30 = vT0_0 -> f2 ;
485
+ vT0_0 -> f2 = new$SomeT0 (vT0_2 );
486
+ vT0_0 -> f2 -> rc ++ ;
487
+ $decr_OptT0 (oldValue$30 );
488
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
489
+ ; $decr_T0 (vT0_0 );
490
+ ; $decr_T0 (vT0_2 );
491
+ struct OptT0 * oldValue$31 = vT0_3 -> f2 ;
492
+ vT0_3 -> f2 = new$SomeT0 (vT0_3 );
493
+ vT0_3 -> f2 -> rc ++ ;
494
+ $decr_OptT0 (oldValue$31 );
495
+ ; $decr_T0 (vT0_3 );
496
+ processAllPCRs (); VALGRIND_DO_LEAK_CHECK ;
497
+ ; $decr_T0 (vT0_3 );
498
+ int ret$32 = 0 ;
306
499
processAllPCRs ();
307
- return ret$3 ;
500
+ return ret$32 ;
308
501
}
0 commit comments