Skip to content

Instantly share code, notes, and snippets.

@nnkken
Created September 14, 2019 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nnkken/8aea1eaf1e43a963a9309c98ae4f891e to your computer and use it in GitHub Desktop.
Save nnkken/8aea1eaf1e43a963a9309c98ae4f891e to your computer and use it in GitHub Desktop.
Setjump test
#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