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)14 bar (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