1#include "pass_map2.c"
2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h>
5
6
7int main ()
8{
9  t1* arr1 = malloc(4 * sizeof (t1));
10  u8* arr2 = malloc (3 * sizeof (char));
11  arr1[0] = (t1) {.f1 = 0, .f2 = 0};
12  arr1[1] = (t1) {.f1 = 1, .f2 = 1};
13  arr1[2] = (t1) {.f1 = 2, .f2 = 0};
14  arr1[3] = (t1) {.f1 = 3, .f2 = 1};
15  *arr2 = 4;
16  *(arr2 + 1) = 5;
17  *(arr2 + 2) = 6;
18  int i;
19  for (i = 0; i != 4; i++) {
20    printf("arr1[%d] = {%d, %d};\n", i, arr1[i].f1, arr1[i].f2.boolean);
21  }
22  for (i = 0; i != 3; i++) {
23    printf("arr2[%d] = %d;\n", i, arr2[i]);
24  }
25  t2* arg_1 = malloc (sizeof (t2));
26  *arg_1 = (t2) {.p1 = arr1, .p2 = arr2};
27  t3* arg = malloc (sizeof (t3));
28  *arg = (t3) {.arrs = *arg_1, .b = 1};
29  foo (arg);  // Theoretically, we need to assign the result of `foo(arg)' to
30              // a variable, to maintain the functional semantics. In this test,
31              // we intentionally don't do it to manifest that it is indeed updated
32              // in-place. / zilinc
33  printf ("-------------------------------\n");
34  for (i = 0; i != 4; i++) {
35    printf("arr1[%d] = {%d, %d};\n", i, arr1[i].f1, arr1[i].f2.boolean);
36  }
37  for (i = 0; i != 3; i++) {
38    printf("arr2[%d] = %d;\n", i, arr2[i]);
39  }
40
41  for (i = 0; i != 4; i++) {
42    printf("arg.arrs.p1[%d] = {%d,_};\n", i, arg->arrs.p1[i].f1);
43  }
44  for (i = 0; i != 3; i++) {
45    printf("arg.arrs.p2[%d] = %d;\n", i, arg->arrs.p2[i]);
46  }
47
48  return 0;
49}
50