/* Consider these types */
typedef int arr_unknown[];
typedef int func_unknown();
/* And then these */
typedef int arr_4[4];
typedef int func_4(int, int, int, int);
/* And finally these */
typedef int arr_2[2];
typedef int func_2(int, int);
/* Consider these subjects */
arr_4 some_arr;
func_4 some_func;
double * some_double_ptr;
int main(void) {
/* Consider these intermediaries */
arr_unknown * a_u;
func_unknown * f_u;
void * vp;
/* Three pointers of different types than line 13 */
arr_2 * a_2;
func_2 * f_2;
char * cp;
/*
* Observe how the intermediaries allow for
* conversions without casting
*/
a_2 = a_u = &some_arr;
f_2 = f_u = some_func;
cp = vp = some_double_ptr;
return 0;
}
int some_func(int w, int x, int y, int z) {
return 0;
}
LyogQ29uc2lkZXIgdGhlc2UgdHlwZXMgKi8KdHlwZWRlZiBpbnQgYXJyX3Vua25vd25bXTsKdHlwZWRlZiBpbnQgZnVuY191bmtub3duKCk7CgovKiBBbmQgdGhlbiB0aGVzZSAqLwp0eXBlZGVmIGludCBhcnJfNFs0XTsKdHlwZWRlZiBpbnQgZnVuY180KGludCwgaW50LCBpbnQsIGludCk7CgovKiBBbmQgZmluYWxseSB0aGVzZSAqLwp0eXBlZGVmIGludCBhcnJfMlsyXTsKdHlwZWRlZiBpbnQgZnVuY18yKGludCwgaW50KTsKCi8qIENvbnNpZGVyIHRoZXNlIHN1YmplY3RzICovCmFycl80IHNvbWVfYXJyOwpmdW5jXzQgc29tZV9mdW5jOwpkb3VibGUgKiBzb21lX2RvdWJsZV9wdHI7CgppbnQgbWFpbih2b2lkKSB7CiAgICAvKiBDb25zaWRlciB0aGVzZSBpbnRlcm1lZGlhcmllcyAqLwogICAgYXJyX3Vua25vd24gKiBhX3U7CiAgICBmdW5jX3Vua25vd24gKiBmX3U7CiAgICB2b2lkICogdnA7CgogICAgLyogVGhyZWUgcG9pbnRlcnMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYW4gbGluZSAxMyAqLwogICAgYXJyXzIgKiBhXzI7CiAgICBmdW5jXzIgKiBmXzI7CiAgICBjaGFyICogY3A7CgogICAgLyoKICAgICAqIE9ic2VydmUgaG93IHRoZSBpbnRlcm1lZGlhcmllcyBhbGxvdyBmb3IKICAgICAqIGNvbnZlcnNpb25zIHdpdGhvdXQgY2FzdGluZwogICAgICovCiAgICBhXzIgPSBhX3UgPSAmc29tZV9hcnI7CiAgICBmXzIgPSBmX3UgPSBzb21lX2Z1bmM7CiAgICBjcCA9IHZwID0gc29tZV9kb3VibGVfcHRyOwoKICAgIHJldHVybiAwOwogIH0KCmludCBzb21lX2Z1bmMoaW50IHcsIGludCB4LCBpbnQgeSwgaW50IHopIHsKICAgIHJldHVybiAwOwogIH0=