Browse Source

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

Rusty Russell 18 years ago
parent
commit
bd9f392599

+ 0 - 26
typesafe_cb/test/compile_fail-cast_if_type-callback.c

@@ -1,26 +0,0 @@
-#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;
-}

+ 3 - 0
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);

+ 2 - 2
typesafe_cb/test/compile_fail-cast_if_type-callback-int.c → typesafe_cb/test/compile_fail-typesafe_cb-int.c

@@ -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;

+ 8 - 0
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;
 }

+ 3 - 0
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

+ 3 - 0
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