From: Rusty Russell Date: Thu, 28 Feb 2008 04:20:36 +0000 (+1100) Subject: Compile even with !HAVE_TYPEOF etc, and remove redundant test case. X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=bd9f392599277acd2404688d034aa98b652ee1b7 Compile even with !HAVE_TYPEOF etc, and remove redundant test case. --- diff --git a/typesafe_cb/test/compile_fail-cast_if_type-callback-int.c b/typesafe_cb/test/compile_fail-cast_if_type-callback-int.c deleted file mode 100644 index 85006c9b..00000000 --- a/typesafe_cb/test/compile_fail-cast_if_type-callback-int.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "typesafe_cb/typesafe_cb.h" -#include - -void _callback(void (*fn)(void *arg), void *arg); -void _callback(void (*fn)(void *arg), void *arg) -{ - fn(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) - -void my_callback(int something); -void my_callback(int something) -{ -} - -int main(int argc, char *argv[]) -{ -#ifdef FAIL - callback(my_callback, 100); -#endif - return 0; -} diff --git a/typesafe_cb/test/compile_fail-cast_if_type-callback.c b/typesafe_cb/test/compile_fail-cast_if_type-callback.c deleted file mode 100644 index 313a53ed..00000000 --- a/typesafe_cb/test/compile_fail-cast_if_type-callback.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "typesafe_cb/typesafe_cb.h" -#include - -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; -} diff --git a/typesafe_cb/test/compile_fail-cast_if_type.c b/typesafe_cb/test/compile_fail-cast_if_type.c index 2ab3fa23..1e417cba 100644 --- a/typesafe_cb/test/compile_fail-cast_if_type.c +++ b/typesafe_cb/test/compile_fail-cast_if_type.c @@ -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); diff --git a/typesafe_cb/test/compile_fail-typesafe_cb-int.c b/typesafe_cb/test/compile_fail-typesafe_cb-int.c new file mode 100644 index 00000000..54d0e7ba --- /dev/null +++ b/typesafe_cb/test/compile_fail-typesafe_cb-int.c @@ -0,0 +1,27 @@ +#include "typesafe_cb/typesafe_cb.h" +#include + +void _callback(void (*fn)(void *arg), void *arg); +void _callback(void (*fn)(void *arg), void *arg) +{ + fn(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(typesafe_cb(void, (fn), (arg)), (arg)) + +void my_callback(int something); +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; +} diff --git a/typesafe_cb/test/compile_fail-typesafe_cb.c b/typesafe_cb/test/compile_fail-typesafe_cb.c index 34050089..d305d5fb 100644 --- a/typesafe_cb/test/compile_fail-typesafe_cb.c +++ b/typesafe_cb/test/compile_fail-typesafe_cb.c @@ -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; } diff --git a/typesafe_cb/test/compile_fail-typesafe_cb_postargs.c b/typesafe_cb/test/compile_fail-typesafe_cb_postargs.c index e6ec8260..099eb257 100644 --- a/typesafe_cb/test/compile_fail-typesafe_cb_postargs.c +++ b/typesafe_cb/test/compile_fail-typesafe_cb_postargs.c @@ -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 diff --git a/typesafe_cb/test/compile_fail-typesafe_cb_preargs.c b/typesafe_cb/test/compile_fail-typesafe_cb_preargs.c index ce1ada2f..38daec51 100644 --- a/typesafe_cb/test/compile_fail-typesafe_cb_preargs.c +++ b/typesafe_cb/test/compile_fail-typesafe_cb_preargs.c @@ -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