* gcc-interface/trans.c (node_has_volatile_full_access) <N_Identifier>:
[official-gcc.git] / gcc / testsuite / gcc.c-torture / compile / 20070129.c
blob3204d9658076213a093d858693efef1838d0a046
1 /* This testcase would cause a hang in PTA solving due to a complex copy
2 constraint and marking the wrong variable as changed. */
4 typedef struct RExC_state_t
6 char *end;
7 char *parse;
8 } RExC_state_t;
10 struct regnode_string
12 unsigned char str_len;
13 char string[1];
16 static void *regatom (RExC_state_t * pRExC_state, int *flagp);
18 static void *
19 regpiece (RExC_state_t * pRExC_state, int *flagp)
21 return regatom (0, 0);
24 static void *
25 regbranch (RExC_state_t * pRExC_state, int *flagp, int first)
27 return regpiece (0, 0);
30 static void *
31 reg (RExC_state_t * pRExC_state, int paren, int *flagp)
33 return regbranch (0, 0, 1);
36 void *
37 Perl_pregcomp (char *exp, char *xend, void *pm)
39 return reg (0, 0, 0);
42 static void *
43 regatom (RExC_state_t * pRExC_state, int *flagp)
45 register void *ret = 0;
46 int flags;
48 tryagain:
49 switch (*(pRExC_state->parse))
51 case '(':
52 ret = reg (pRExC_state, 1, &flags);
53 if (flags & 0x8)
55 goto tryagain;
57 break;
58 default:
60 register unsigned long len;
61 register unsigned ender;
62 register char *p;
63 char *oldp, *s;
64 unsigned long numlen;
65 unsigned long foldlen;
66 unsigned char tmpbuf[6 + 1], *foldbuf;
68 defchar:
69 s = (((struct regnode_string *) ret)->string);
70 for (len = 0, p = (pRExC_state->parse) - 1;
71 len < 127 && p < (pRExC_state->end); len++)
73 if (((*p) == '*' || (*p) == '+' || (*p) == '?'
74 || ((*p) == '{' && regcurly (p))))
76 unsigned long unilen;
77 for (foldbuf = tmpbuf; foldlen; foldlen -= numlen)
79 reguni (pRExC_state, ender, s, &unilen);
80 s += unilen;
82 break;
84 unsigned long unilen;
86 reguni (pRExC_state, ender, s, &unilen);
87 s += unilen;
91 break;
93 return (ret);