libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / stackalign / setjmp-2.c
blob2fd3be8fda229a1c18b603d9d2d6fc90ff892a17
1 /* { dg-do run { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } */
3 #include <setjmp.h>
4 #include <signal.h>
6 #ifndef NULL
7 #define NULL ((void *)0)
8 #endif
9 static jmp_buf segv_jmpbuf;
11 static void segv_handler(int seg)
13 __builtin_longjmp(segv_jmpbuf, 1);
16 static int is_addressable(void *p, size_t size)
18 volatile char * volatile cp = (volatile char *)p;
19 volatile int ret;
20 struct sigaction sa, origsa;
21 sigset_t mask;
23 sa.sa_handler = segv_handler;
24 sa.sa_flags = 0;
25 sigfillset(&sa.sa_mask);
26 sigaction(SIGSEGV, &sa, &origsa);
27 sigprocmask(SIG_SETMASK, NULL, &mask);
29 if (__builtin_setjmp(segv_jmpbuf) == 0) {
30 while(size--)
31 *cp++;
32 ret = 1;
33 } else
34 ret = 0;
36 sigaction(SIGSEGV, &origsa, NULL);
37 sigprocmask(SIG_SETMASK, &mask, NULL);
39 return ret;
42 int main(int argc, char **argv)
44 is_addressable(0x0, 1);
45 return 0;