|
@@ -10,8 +10,7 @@ void _callback(void (*fn)(void *arg), void *arg)
|
|
|
/* Callback is set up to warn if arg isn't a pointer (since it won't
|
|
/* Callback is set up to warn if arg isn't a pointer (since it won't
|
|
|
* pass cleanly to _callback's second arg. */
|
|
* pass cleanly to _callback's second arg. */
|
|
|
#define callback(fn, arg) \
|
|
#define callback(fn, arg) \
|
|
|
- _callback(cast_if_type((fn), void (*)(typeof(arg)), void (*)(void *)), \
|
|
|
|
|
- arg)
|
|
|
|
|
|
|
+ _callback(typesafe_cb(void, (fn), (arg)), (arg))
|
|
|
|
|
|
|
|
void my_callback(int something);
|
|
void my_callback(int something);
|
|
|
void my_callback(int something)
|
|
void my_callback(int something)
|
|
@@ -21,6 +20,7 @@ void my_callback(int something)
|
|
|
int main(int argc, char *argv[])
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
{
|
|
|
#ifdef FAIL
|
|
#ifdef FAIL
|
|
|
|
|
+ /* This fails due to arg, not due to cast. */
|
|
|
callback(my_callback, 100);
|
|
callback(my_callback, 100);
|
|
|
#endif
|
|
#endif
|
|
|
return 0;
|
|
return 0;
|