1 /* Verify that calling strndup and strnlen with an unknown bound isn't
2 diagnosed regardless of the size of the array and the type of the bound.
3 { dg-do compile }
4 { dg-options "-O -Wall" } */
5
6 #define NOIPA __attribute__ ((noipa))
7
8 typedef __SIZE_TYPE__ size_t;
9
10 extern char* strndup (const char*, size_t);
11 extern size_t strnlen (const char*, size_t);
12
13 /* TO DO: Passing a zero-length array to any function is almost certainly
14 a bug and should be diagnosed except perpaphs when the function also
15 takes a bound and its value is known to be zero. When this is
16 implemented this test will need to be adjusted. */
17 extern char a0[0];
18
19 extern char a1[1];
20
21 NOIPA char* strndup_a0_si (short n)
22 {
23 return strndup (a0, n);
24 }
25
26 NOIPA char* strndup_a0_i (int n)
27 {
28 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
29 }
30
31 NOIPA char* strndup_a0_li (long n)
32 {
33 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
34 }
35
36 NOIPA char* strndup_a0_lli (long long n)
37 {
38 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
39 }
40
41
42 NOIPA char* strndup_a0_usi (unsigned short n)
43 {
44 return strndup (a0, n);
45 }
46
47 NOIPA char* strndup_a0_ui (unsigned n)
48 {
49 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
50 }
51
52 NOIPA char* strndup_a0_uli (unsigned long n)
53 {
54 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
55 }
56
57 NOIPA char* strndup_a0_ulli (unsigned long long n)
58 {
59 return strndup (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
60 }
61
62
63
64 NOIPA char* strndup_a1_si (short n)
65 {
66 return strndup (a1, n);
67 }
68
69 NOIPA char* strndup_a1_i (int n)
70 {
71 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
72 }
73
74 NOIPA char* strndup_a1_li (long n)
75 {
76 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
77 }
78
79 NOIPA char* strndup_a1_lli (long long n)
80 {
81 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
82 }
83
84
85 NOIPA char* strndup_a1_usi (unsigned short n)
86 {
87 return strndup (a1, n);
88 }
89
90 NOIPA char* strndup_a1_ui (unsigned n)
91 {
92 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
93 }
94
95 NOIPA char* strndup_a1_uli (unsigned long n)
96 {
97 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
98 }
99
100 NOIPA char* strndup_a1_ulli (unsigned long long n)
101 {
102 return strndup (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
103 }
104
105
106 NOIPA size_t strnlen_a0_si (short n)
107 {
108 return strnlen (a0, n);
109 }
110
111 NOIPA size_t strnlen_a0_i (int n)
112 {
113 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
114 }
115
116 NOIPA size_t strnlen_a0_li (long n)
117 {
118 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
119 }
120
121 NOIPA size_t strnlen_a0_lli (long long n)
122 {
123 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
124 }
125
126
127 NOIPA size_t strnlen_a0_usi (unsigned short n)
128 {
129 return strnlen (a0, n);
130 }
131
132 NOIPA size_t strnlen_a0_ui (unsigned n)
133 {
134 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
135 }
136
137 NOIPA size_t strnlen_a0_uli (unsigned long n)
138 {
139 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
140 }
141
142 NOIPA size_t strnlen_a0_ulli (unsigned long long n)
143 {
144 return strnlen (a0, n); // { dg-bogus "\\\[-Wstringop-overread" }
145 }
146
147
148
149 NOIPA size_t strnlen_a1_si (short n)
150 {
151 return strnlen (a1, n);
152 }
153
154 NOIPA size_t strnlen_a1_i (int n)
155 {
156 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
157 }
158
159 NOIPA size_t strnlen_a1_li (long n)
160 {
161 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
162 }
163
164 NOIPA size_t strnlen_a1_lli (long long n)
165 {
166 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
167 }
168
169
170 NOIPA size_t strnlen_a1_usi (unsigned short n)
171 {
172 return strnlen (a1, n);
173 }
174
175 NOIPA size_t strnlen_a1_ui (unsigned n)
176 {
177 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
178 }
179
180 NOIPA size_t strnlen_a1_uli (unsigned long n)
181 {
182 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
183 }
184
185 NOIPA size_t strnlen_a1_ulli (unsigned long long n)
186 {
187 return strnlen (a1, n); // { dg-bogus "\\\[-Wstringop-overread" }
188 }