1 /* { dg-options "-O -fgraphite-identity" } */
2 /* { dg-require-effective-target nonlocal_goto } */
3 
4 #include <setjmp.h>
5 
6 struct x;
7 
8 typedef struct x **(*a)(struct x *);
9 void d (const char *);
10 
11 struct x {
12     union {
13 	struct {
14 	    union {
15 		a *i;
16 	    } l;
17 	    int s;
18 	} y;
19     } e;
20 };
21 
22 jmp_buf c;
23 
24 void
b(struct x * r)25 b(struct x *r)
26 {
27   int f;
28   static int w = 0;
29   volatile jmp_buf m;
30   f = (*(((struct x *)r)->e.y.l.i[2]((struct x *)r)))->e.y.s;
31   if (w++ != 0)
32     __builtin_memcpy((char *)m, (const char *)c, sizeof(jmp_buf));
33   if (setjmp (c) == 0) {
34       int z;
35       for (z = 0; z < 0; ++z)
36 	;
37   }
38   d((const char *)m);
39 }
40