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