1 /* { dg-do compile } */ 2 /* { dg-require-effective-target fpic } */ 3 /* { dg-options "-Os -fpic" } */ 4 5 #include <string.h> 6 7 typedef struct 8 { 9 char *a; 10 char *b; 11 } *foo; 12 13 void bar(foo x)14bar (foo x) 15 { 16 char *c = x->b; 17 char *d = (void *)0; 18 unsigned int e = 0, f = 0, g; 19 while (*c != ':') 20 if (*c == '%') 21 { 22 ++c; 23 switch (*c++) 24 { 25 case 'N': 26 g = strlen (x->a); 27 if (e + g >= f) { 28 char *h = d; 29 f += 256 + g; 30 d = (char *) __builtin_alloca (f); 31 memcpy (d, h, e); 32 }; 33 memcpy (&d[e], x->a, g); 34 e += g; 35 break; 36 } 37 } 38 } 39