1/* { dg-do compile } */
2/* { dg-require-effective-target fpic } */
3/* { dg-options "-Os -fpic" } */
4
5#include <string.h>
6
7typedef struct
8{
9  char *a;
10  char *b;
11} *foo;
12
13void
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