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