1 extern int ival; 2 extern int *ipval; 3 extern int array[3]; 4 extern int matrix[3][3]; 5 extern int fun(int); 6 7 // via an argument 8 void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int))); 9 void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int))) 10 { 11 fv(); 12 13 fb(a); 14 fi(a); 15 fl(a); 16 fb(123); 17 fi(123); 18 fl(123); 19 fb(123L); 20 fi(123L); 21 fl(123L); 22 fb(ival); 23 fi(ival); 24 fl(ival); 25 26 fip(p); 27 fip((void*)0); 28 fip(ipval); 29 fip(&ival); 30 fip(array); 31 fim(matrix); 32 33 fvp(p); 34 fvp((void*)0); 35 fvp(ipval); 36 fvp(&ival); 37 fvp(array); 38 fvp(matrix); 39 40 fvp(fun); 41 fvp(&fun); 42 ffp(fun); 43 ffp(&fun); 44 } 45 46 // a global 47 extern int (*fb)(unsigned char); 48 extern int (*fi)(int); 49 extern int (*fl)(long); 50 extern int (*fv)(void); 51 extern int (*fip)(int *); 52 extern int (*fim)(int (*)[3]); 53 extern int (*fvp)(void *); 54 extern int (*ffp)(int (*)(int)); 55 56 void glb(int a, int *p); 57 void glb(int a, int *p) 58 { 59 fv(); 60 61 fb(a); 62 fi(a); 63 fl(a); 64 fb(123); 65 fi(123); 66 fl(123); 67 fb(123L); 68 fi(123L); 69 fl(123L); 70 fb(ival); 71 fi(ival); 72 fl(ival); 73 74 fip(p); 75 fip((void*)0); 76 fip(ipval); 77 fip(&ival); 78 fip(array); 79 fim(matrix); 80 81 fvp(p); 82 fvp((void*)0); 83 fvp(ipval); 84 fvp(&ival); 85 fvp(array); 86 fvp(matrix); 87 88 fvp(fun); 89 fvp(&fun); 90 ffp(fun); 91 ffp(&fun); 92 } 93 94 // via a struct member: 95 // -> force to create a register containing the function pointer 96 struct ops { 97 int (*fb)(unsigned char); 98 int (*fi)(int); 99 int (*fl)(long); 100 int (*fv)(void); 101 int (*fip)(int *); 102 int (*fim)(int (*)[3]); 103 int (*fvp)(void *); 104 int (*ffp)(int (*)(int)); 105 106 int (*const cfi)(int); // for the fun of it 107 }; 108 109 void ops(int a, int *p, struct ops *ops); 110 void ops(int a, int *p, struct ops *ops) 111 { 112 ops->fv(); 113 114 ops->fb(a); 115 ops->fi(a); 116 ops->fl(a); 117 ops->fb(123); 118 ops->fi(123); 119 ops->fl(123); 120 ops->fb(123L); 121 ops->fi(123L); 122 ops->fl(123L); 123 ops->fb(ival); 124 ops->fi(ival); 125 ops->fl(ival); 126 127 ops->fip(p); 128 ops->fip((void*)0); 129 ops->fip(ipval); 130 ops->fip(&ival); 131 ops->fip(array); 132 ops->fim(matrix); 133 134 ops->fvp(p); 135 ops->fvp((void*)0); 136 ops->fvp(ipval); 137 ops->fvp(&ival); 138 ops->fvp(array); 139 ops->fvp(matrix); 140 141 ops->fvp(fun); 142 ops->fvp(&fun); 143 ops->ffp(fun); 144 ops->ffp(&fun); 145 ops->fvp(fi); 146 147 ops->cfi(42); 148 } 149 150 /* 151 * check-name: Function pointer code generation 152 * check-command: sparsec -c $file -o tmp.o 153 */ 154