#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
#include <signal.h>

jmp_buf env;

void handler(int s) {
    signal(SIGSEGV, handler);
    longjmp(env, 1);
}

int main() {
    int a[2][2] = {{0, 1}, {2, 3}};
    int retval;
    signal(SIGSEGV, handler);
    if (setjmp(env) == 0) {
        retval = **a;
        puts("a[2][2] is a[2][2]");
    } else puts("a[2][2] is not a[2][2]");
    if (setjmp(env) == 0) {
        retval = **((int **) a);
        puts("a[2][2] is *a[2]");
    } else puts("a[2][2] is not *a[2]");
    return retval;
}
