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)25b(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