#include #include #include void sub2(ft_test *t, jmp_buf jb) { ft_log(t, "sub2\n"); longjmp(jb, 73); } void sub1(ft_test *t, jmp_buf jb) { ft_log(t, "sub1\n"); sub2(t, jb); } static void _ft_setjmp_simple(ft_test *t) { volatile int return_count = 0; jmp_buf jb; int rc = setjmp(jb); return_count++; ft_log(t, "setjmp #%d returned %d\n", return_count, rc); ft_assert(t, (rc == 0) || (rc == 73)); if(rc == 0) { sub1(t, jb); } else { ft_assert(t, (rc == 73) && (return_count == 2)); } } ft_test ft_setjmp_simple = { .name = "Simple long jump", .function = _ft_setjmp_simple, };