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