Created
September 14, 2019 11:54
-
-
Save nnkken/8aea1eaf1e43a963a9309c98ae4f891e to your computer and use it in GitHub Desktop.
Setjump test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <setjmp.h> | |
jmp_buf env; | |
int my_func(int a, int b) { | |
if (b == 0) { | |
printf("do not allow division by 0\n"); | |
longjmp(env, 1); | |
} | |
return a / b; | |
} | |
int main(int argc, char const *argv[]) { | |
int a1 = 1; | |
int a2 = 2; | |
int a3 = 3; | |
int a4 = 4; | |
int a5 = 5; | |
int a6 = 6; | |
int a7 = 7; | |
int a8 = 8; | |
int a9 = 9; | |
int a10 = 10; | |
int a11 = 11; | |
int a12 = 12; | |
int a13 = 13; | |
int a14 = 14; | |
int a15 = 15; | |
int a16 = 16; | |
int a17 = 17; | |
int a18 = 18; | |
int a19 = 19; | |
int a20 = 20; | |
int a21 = 21; | |
int a22 = 22; | |
int a23 = 23; | |
int a24 = 24; | |
int a25 = 25; | |
int a26 = 26; | |
int a27 = 27; | |
int res = setjmp(env); | |
if (res == 0) { | |
printf("return from setjmp\n"); | |
printf("(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\n", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); | |
a1 = 101; | |
a2 = 102; | |
a3 = 103; | |
a4 = 104; | |
a5 = 105; | |
a6 = 106; | |
a7 = 107; | |
a8 = 108; | |
a9 = 109; | |
a10 = 1010; | |
a11 = 1011; | |
a12 = 1012; | |
a13 = 1013; | |
a14 = 1014; | |
a15 = 1015; | |
a16 = 1016; | |
a17 = 1017; | |
a18 = 1018; | |
a19 = 1019; | |
a20 = 1020; | |
a21 = 1021; | |
a22 = 1022; | |
a23 = 1023; | |
a24 = 1024; | |
a25 = 1025; | |
a26 = 1026; | |
a27 = 1027; | |
my_func(10, 0); | |
} else { | |
printf("return from longjmp: %d\n", res); | |
// clang without -O gives 101, 102, ..., 1027 | |
// clang with -O gives 1, 2, ..., 27 | |
// testing platform: clang 8.0.0 on WSL with ArchLinux with glibc 2.29-1 | |
printf("(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\n", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment