1 /* Test to verify that --param ssa_name_def_chain_limit can be used to
2 limit the maximum number of SSA_NAME assignments the warning follows.
3 { dg-do compile }
4 { dg-options "-O2 -Wall --param ssa-name-def-chain-limit=4" } */
5
6 #define NOIPA __attribute__ ((noipa))
7
8 const char a9[] = "123456789";
9
10 void sink (const char*, ...);
11
g2(int i)12 NOIPA int g2 (int i)
13 {
14 if (i < 1) i = 1;
15
16 const char *p0 = a9;
17 const char *p1 = p0 + i;
18 const char *p2 = p1 + i;
19
20 sink (p0, p1, p2);
21
22 return p2[8]; // { dg-warning "\\\[-Warray-bounds]" }
23 }
24
g3(int i)25 NOIPA int g3 (int i)
26 {
27 if (i < 1) i = 1;
28
29 const char *p0 = a9;
30 const char *p1 = p0 + i;
31 const char *p2 = p1 + i;
32 const char *p3 = p2 + i;
33
34 sink (p0, p1, p2, p3);
35
36 return p3[7]; // { dg-warning "\\\[-Warray-bounds]" }
37 }
38
g4(int i)39 NOIPA int g4 (int i)
40 {
41 if (i < 1) i = 1;
42
43 const char *p0 = a9;
44 const char *p1 = p0 + i;
45 const char *p2 = p1 + i;
46 const char *p3 = p2 + i;
47 const char *p4 = p3 + i;
48
49 sink (p0, p1, p2, p3, p4);
50
51 return p4[6]; // { dg-warning "\\\[-Warray-bounds]" }
52 }
53
g5(int i)54 NOIPA int g5 (int i)
55 {
56 if (i < 1) i = 1;
57
58 const char *p0 = a9;
59 const char *p1 = p0 + i;
60 const char *p2 = p1 + i;
61 const char *p3 = p2 + i;
62 const char *p4 = p3 + i;
63 const char *p5 = p4 + i;
64
65 sink (p0, p1, p2, p3, p4, p5);
66
67 return p5[5];
68 }
69
g6(int i)70 NOIPA int g6 (int i)
71 {
72 if (i < 1) i = 1;
73
74 const char *p0 = a9;
75 const char *p1 = p0 + i;
76 const char *p2 = p1 + i;
77 const char *p3 = p2 + i;
78 const char *p4 = p3 + i;
79 const char *p5 = p4 + i;
80 const char *p6 = p5 + i;
81
82 sink (p0, p1, p2, p3, p4, p5, p6);
83
84 return p6[4];
85 }
86
g7(int i)87 NOIPA int g7 (int i)
88 {
89 if (i < 1) i = 1;
90
91 const char *p0 = a9;
92 const char *p1 = p0 + i;
93 const char *p2 = p1 + i;
94 const char *p3 = p2 + i;
95 const char *p4 = p3 + i;
96 const char *p5 = p4 + i;
97 const char *p6 = p5 + i;
98 const char *p7 = p6 + i;
99
100 sink (p0, p1, p2, p3, p4, p5, p6, p7);
101
102 return p7[3];
103 }
104
g8(int i)105 NOIPA int g8 (int i)
106 {
107 if (i < 1) i = 1;
108
109 const char *p0 = a9;
110 const char *p1 = p0 + i;
111 const char *p2 = p1 + i;
112 const char *p3 = p2 + i;
113 const char *p4 = p3 + i;
114 const char *p5 = p4 + i;
115 const char *p6 = p5 + i;
116 const char *p7 = p6 + i;
117 const char *p8 = p7 + i;
118
119 sink (p0, p1, p2, p3, p4, p5, p6, p7, p8);
120
121 return p8[2];
122 }
123