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