aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/tests2/128_run_atexit.c
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
commitfa2bdd711212ba6b7a94a20971e8bfa281e73296 (patch)
tree6713b3c0379507d49558287b71dd360ce188a2f0 /tinycc/tests/tests2/128_run_atexit.c
lol
Diffstat (limited to 'tinycc/tests/tests2/128_run_atexit.c')
-rw-r--r--tinycc/tests/tests2/128_run_atexit.c54
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