diff options
Diffstat (limited to 'tinycc/tests/tests2/128_run_atexit.c')
| -rw-r--r-- | tinycc/tests/tests2/128_run_atexit.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tinycc/tests/tests2/128_run_atexit.c b/tinycc/tests/tests2/128_run_atexit.c new file mode 100644 index 0000000..0748c86 --- /dev/null +++ b/tinycc/tests/tests2/128_run_atexit.c @@ -0,0 +1,54 @@ +#include <stdio.h> + +int atexit(void (*function)(void)); +int on_exit(void (*function)(int, void *), void *arg); +void exit(int status); + +void cleanup1(void) +{ + printf ("cleanup1\n"); + fflush(stdout); +} + +void cleanup2(void) +{ + printf ("cleanup2\n"); +} + +void cleanup3(int ret, void *arg) +{ + printf ("%d %s\n", ret, (char *) arg); +} + +void cleanup4(int ret, void *arg) +{ + printf ("%d %s\n", ret, (char *) arg); +} + +void __attribute((destructor)) cleanup5(void) +{ + printf ("cleanup5\n"); +} + +void test(void) +{ + atexit(cleanup1); + atexit(cleanup2); + on_exit(cleanup3, "cleanup3"); + on_exit(cleanup4, "cleanup4"); +} + +#if defined test_128_return +int main(int argc, char **argv) +{ + test(); + return 1; +} + +#elif defined test_128_exit +int main(int argc, char **argv) +{ + test(); + exit(2); +} +#endif |
