diff options
Diffstat (limited to 'lib/ccan/tcon/test')
-rw-r--r-- | lib/ccan/tcon/test/compile_fail-tcon_cast.c | 29 | ||||
-rw-r--r-- | lib/ccan/tcon/test/compile_fail.c | 25 | ||||
-rw-r--r-- | lib/ccan/tcon/test/compile_ok-void.c | 21 | ||||
-rw-r--r-- | lib/ccan/tcon/test/compile_ok.c | 27 |
4 files changed, 102 insertions, 0 deletions
diff --git a/lib/ccan/tcon/test/compile_fail-tcon_cast.c b/lib/ccan/tcon/test/compile_fail-tcon_cast.c new file mode 100644 index 0000000000..f80ef42c09 --- /dev/null +++ b/lib/ccan/tcon/test/compile_fail-tcon_cast.c @@ -0,0 +1,29 @@ +#include <ccan/tcon/tcon.h> +#include <stdlib.h> + +struct container { + void *p; +}; + +struct int_and_charp_container { + struct container raw; + TCON(int *tc1; char *tc2); +}; + +int main(int argc, char *argv[]) +{ + struct int_and_charp_container icon; +#ifdef FAIL +#if !HAVE_TYPEOF +#error We cannot detect type problems without HAVE_TYPEOF +#endif + char * +#else + int * +#endif + x; + + icon.raw.p = NULL; + x = tcon_cast(&icon, tc1, icon.raw.p); + return 0; +} diff --git a/lib/ccan/tcon/test/compile_fail.c b/lib/ccan/tcon/test/compile_fail.c new file mode 100644 index 0000000000..683bbd62ff --- /dev/null +++ b/lib/ccan/tcon/test/compile_fail.c @@ -0,0 +1,25 @@ +#include <ccan/tcon/tcon.h> +#include <stdlib.h> + +struct container { + void *p; +}; + +struct int_container { + struct container raw; + TCON(int *canary); +}; + +int main(int argc, char *argv[]) +{ + struct int_container icon; +#ifdef FAIL + char * +#else + int * +#endif + x = NULL; + + tcon_check(&icon, canary, x)->raw.p = x; + return 0; +} diff --git a/lib/ccan/tcon/test/compile_ok-void.c b/lib/ccan/tcon/test/compile_ok-void.c new file mode 100644 index 0000000000..26b712f6b2 --- /dev/null +++ b/lib/ccan/tcon/test/compile_ok-void.c @@ -0,0 +1,21 @@ +#include <ccan/tcon/tcon.h> +#include <stdlib.h> + +struct container { + void *p; +}; + +struct void_container { + struct container raw; + TCON(void *canary); +}; + +int main(int argc, char *argv[]) +{ + struct void_container vcon; + + tcon_check(&vcon, canary, NULL)->raw.p = NULL; + tcon_check(&vcon, canary, argv[0])->raw.p = NULL; + tcon_check(&vcon, canary, main)->raw.p = NULL; + return 0; +} diff --git a/lib/ccan/tcon/test/compile_ok.c b/lib/ccan/tcon/test/compile_ok.c new file mode 100644 index 0000000000..447f0ee50a --- /dev/null +++ b/lib/ccan/tcon/test/compile_ok.c @@ -0,0 +1,27 @@ +#include <ccan/tcon/tcon.h> +#include <stdlib.h> + +struct container { + void *p; +}; + +struct int_container { + struct container raw; + TCON(int tc); +}; + +struct charp_and_int_container { + struct container raw; + TCON(int tc1; char *tc2); +}; + +int main(int argc, char *argv[]) +{ + struct int_container icon; + struct charp_and_int_container cicon; + + tcon_check(&icon, tc, 7)->raw.p = NULL; + tcon_check(&cicon, tc1, 7)->raw.p = argv[0]; + tcon_check(&cicon, tc2, argv[0])->raw.p = argv[0]; + return 0; +} |