PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20050826-2.c
blob0398049856cc2b1b71a841316c74df3e5724b8b2
1 /* PR rtl-optimization/23560 */
3 struct rtattr
5 unsigned short rta_len;
6 unsigned short rta_type;
7 };
9 __attribute__ ((noinline))
10 int inet_check_attr (void *r, struct rtattr **rta)
12 int i;
14 for (i = 1; i <= 14; i++)
16 struct rtattr *attr = rta[i - 1];
17 if (attr)
19 if (attr->rta_len - sizeof (struct rtattr) < 4)
20 return -22;
21 if (i != 9 && i != 8)
22 rta[i - 1] = attr + 1;
25 return 0;
28 extern void abort (void);
30 int
31 main (void)
33 struct rtattr rt[2];
34 struct rtattr *rta[14];
35 int i;
37 rt[0].rta_len = sizeof (struct rtattr) + 8;
38 rt[0].rta_type = 0;
39 rt[1] = rt[0];
40 for (i = 0; i < 14; i++)
41 rta[i] = &rt[0];
42 if (inet_check_attr (0, rta) != 0)
43 abort ();
44 for (i = 0; i < 14; i++)
45 if (rta[i] != &rt[i != 7 && i != 8])
46 abort ();
47 for (i = 0; i < 14; i++)
48 rta[i] = &rt[0];
49 rta[1] = 0;
50 rt[1].rta_len -= 8;
51 rta[5] = &rt[1];
52 if (inet_check_attr (0, rta) != -22)
53 abort ();
54 for (i = 0; i < 14; i++)
55 if (i == 1 && rta[i] != 0)
56 abort ();
57 else if (i != 1 && i <= 5 && rta[i] != &rt[1])
58 abort ();
59 else if (i > 5 && rta[i] != &rt[0])
60 abort ();
61 return 0;