Commit bd9f3925 authored by Rusty Russell's avatar Rusty Russell

Compile even with !HAVE_TYPEOF etc, and remove redundant test case.

parent 246bde09
#include "typesafe_cb/typesafe_cb.h"
#include <stdlib.h>
static void _callback(void (*fn)(void *arg), void *arg)
{
fn(arg);
}
#define callback(fn, arg) \
_callback(cast_if_type((fn), void (*)(typeof(arg)), void (*)(void *)), \
arg)
static void my_callback(char *p)
{
}
int main(int argc, char *argv[])
{
callback(my_callback, "hello world");
#ifdef FAIL
/* Must be a char * */
callback(my_callback, my_callback);
#endif
return 0;
}
......@@ -14,6 +14,9 @@ int main(int argc, char *argv[])
#ifdef FAIL
int x = 0;
set_some_value(x);
#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
#error "Unfortunately we don't fail if cast_if_type is a noop."
#endif
#else
void *p = 0;
set_some_value(p);
......
......@@ -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
* pass cleanly to _callback's second 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)
......@@ -21,6 +20,7 @@ void my_callback(int something)
int main(int argc, char *argv[])
{
#ifdef FAIL
/* This fails due to arg, not due to cast. */
callback(my_callback, 100);
#endif
return 0;
......
......@@ -16,10 +16,18 @@ int main(int argc, char *argv[])
{
#ifdef FAIL
int *p;
#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
#error "Unfortunately we don't fail if cast_if_type is a noop."
#endif
#else
char *p;
#endif
p = NULL;
/* This should work always. */
register_callback(my_callback, "hello world");
/* This will fail with FAIL defined */
register_callback(my_callback, p);
return 0;
}
......@@ -15,6 +15,9 @@ int main(int argc, char *argv[])
{
#ifdef FAIL
int *p;
#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
#error "Unfortunately we don't fail if cast_if_type is a noop."
#endif
#else
char *p;
#endif
......
......@@ -16,6 +16,9 @@ int main(int argc, char *argv[])
{
#ifdef FAIL
int *p;
#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
#error "Unfortunately we don't fail if cast_if_type is a noop."
#endif
#else
char *p;
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment