xref: /openbsd-src/regress/lib/libc/setjmp-signal/setjmp-signal.c (revision d60f87b90b61195911d7f7daf6da6231b052d42d)
1*d60f87b9Sbluhm /*	$OpenBSD: setjmp-signal.c,v 1.4 2017/07/27 12:31:09 bluhm Exp $	*/
235f0245fSart /*
335f0245fSart  *	Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain.
435f0245fSart  */
535f0245fSart 
635f0245fSart #include <setjmp.h>
735f0245fSart #include <signal.h>
835f0245fSart 
935f0245fSart jmp_buf jb;
1035f0245fSart 
1135f0245fSart void
segv_handler(int signum)1235f0245fSart segv_handler(int signum)
1335f0245fSart {
1435f0245fSart 	longjmp(jb, 1);
1535f0245fSart }
1635f0245fSart 
1735f0245fSart int
main()1835f0245fSart main()
1935f0245fSart {
2035f0245fSart 	signal(SIGSEGV, segv_handler);
2135f0245fSart 	if (setjmp(jb) == 0) {
22*d60f87b9Sbluhm 		*((volatile int *)0L) = 0;
2335f0245fSart 		return (1);
2435f0245fSart 	}
2535f0245fSart 	return (0);
2635f0245fSart }
27