| void abort (void); | |
| void exit (int); | |
| struct s {long a; int b;}; | |
| int foo(int x, void *y) | |
| { | |
| switch(x) { | |
| case 0: return ((struct s*)y)->a; | |
| case 1: return *(signed char*)y; | |
| case 2: return *(short*)y; | |
| } | |
| abort(); | |
| } | |
| int main () | |
| { | |
| struct s s; | |
| short sh[10]; | |
| signed char c[10]; | |
| int i; | |
| s.a = 1; | |
| s.b = 2; | |
| for (i = 0; i < 10; i++) { | |
| sh[i] = i; | |
| c[i] = i; | |
| } | |
| if (foo(0, &s) != 1) abort(); | |
| if (foo(1, c+3) != 3) abort(); | |
| if (foo(2, sh+3) != 3) abort(); | |
| exit(0); | |
| } |