annotate gcc/testsuite/c-c++-common/attr-nonstring-3.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Test to exercise warnings when an array declared with attribute "nonstring"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 is passed to a function that expects a nul-terminated string as an argument.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-options "-O2 -Wattributes -Wstringop-overflow -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 typedef __SIZE_TYPE__ size_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef __builtin_va_list va_list;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #if __cplusplus
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 extern "C" {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 void* memchr (const void*, int, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 int memcmp (const void*, const void*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 void* memcpy (void*, const void*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 void* memmove (void*, const void*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 int printf (const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 int puts (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 int puts_unlocked (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 int sprintf (char*, const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 int snprintf (char*, size_t, const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 int vsprintf (char*, const char*, va_list);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 int vsnprintf (char*, size_t, const char*, va_list);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 int strcmp (const char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 int strncmp (const char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 char* stpcpy (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 char* stpncpy (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 char* strcat (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 char* strncat (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 char* strcpy (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 char* strncpy (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 char* strchr (const char*, int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 char* strdup (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 size_t strlen (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 size_t strnlen (const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 char* strndup (const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 #if __cplusplus
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 } /* extern "C" */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 #define NONSTRING __attribute__ ((nonstring))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 /* STR needs to be bigger than ARR to trigger warnings, otherwise
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 since STR must be a string, using both in a string function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 can be assumed to be safe even if ARR isn't nul-terminated. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 char str[5];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 char arr[4] NONSTRING;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 char *ptr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 char *parr NONSTRING;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 struct MemArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 char str[5];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 char arr[4] NONSTRING;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 char *parr NONSTRING;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 void sink (int, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 #define T(call) sink (0, call)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 void test_printf (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 T (printf (str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 T (printf (arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 T (printf (ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 T (printf (parr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 T (printf (p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 T (printf (p->arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 void test_puts (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 T (puts (str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 T (puts (arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 T (puts (ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 T (puts (parr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 T (puts (p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 T (puts (p->arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 void test_snprintf (char *d, size_t n, struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 T (snprintf (d, n, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 T (snprintf (d, n, arr)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 T (snprintf (d, n, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 T (snprintf (d, n, parr)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 T (snprintf (d, n, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 T (snprintf (d, n, p->arr)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 void test_sprintf (char *d, struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 T (sprintf (d, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 T (sprintf (d, arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 T (sprintf (d, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 T (sprintf (d, parr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 T (sprintf (d, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 T (sprintf (d, p->arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 void test_vsnprintf (char *d, size_t n, struct MemArrays *p, va_list va)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 T (vsnprintf (d, n, str, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 T (vsnprintf (d, n, arr, va)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 T (vsnprintf (d, n, ptr, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 T (vsnprintf (d, n, parr, va)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 T (vsnprintf (d, n, p->str, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 T (vsnprintf (d, n, p->arr, va)); /* { dg-warning "argument 3 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 void test_vsprintf (char *d, struct MemArrays *p, va_list va)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 T (vsprintf (d, str, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 T (vsprintf (d, arr, va)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 T (vsprintf (d, ptr, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 T (vsprintf (d, parr, va)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 T (vsprintf (d, p->str, va));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 T (vsprintf (d, p->arr, va)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 void test_strcmp (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 T (strcmp (str, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 T (strcmp (str, arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 T (strcmp (arr, str)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 T (strcmp (str, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 T (strcmp (str, parr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 T (strcmp (parr, str)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 T (strcmp (p->str, p->arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 T (strcmp (p->arr, p->str)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 T (strcmp (p->parr, p->str)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 void test_strncmp_warn (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 enum { N = sizeof arr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 T (strncmp (str, arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 T (strncmp (arr, str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 T (strncmp (str, arr, N + 1)); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound 5" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 T (strncmp (arr, str, N + 1)); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound 5" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 T (strncmp (str, parr, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 T (strncmp (parr, str, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 T (strncmp (p->str, p->arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 T (strncmp (p->arr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 T (strncmp (p->parr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 T (strncmp (p->str, p->arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 T (strncmp (p->arr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 T (strncmp (p->parr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 void test_strncmp_nowarn (struct MemArrays *p, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 T (strncmp (str, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 T (strncmp (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 T (strncmp (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 T (strncmp (str, ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 T (strncmp (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 T (strncmp (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 T (strncmp (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 T (strncmp (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 T (strncmp (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 void test_stpcpy (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 T (stpcpy (str, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 T (stpcpy (str, arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 T (stpcpy (arr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 T (stpcpy (str, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 T (stpcpy (str, parr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 T (stpcpy (parr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 T (stpcpy (p->str, p->arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214 T (stpcpy (p->arr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 T (stpcpy (p->parr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 void test_stpncpy_nowarn (struct MemArrays *p, unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 T (stpncpy (str, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 T (stpncpy (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 T (stpncpy (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225 T (stpncpy (str, ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 T (stpncpy (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227 T (stpncpy (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229 T (stpncpy (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 T (stpncpy (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 T (stpncpy (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235 void test_stpncpy_warn (struct MemArrays *p, unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
237 enum { N = sizeof arr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
238
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
239 T (stpncpy (str, str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
240 T (stpncpy (str, arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241 T (stpncpy (arr, str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
243 T (stpncpy (str, ptr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
244 T (stpncpy (str, parr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
245 T (stpncpy (parr, str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
246
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
247 T (stpncpy (p->str, p->arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
248 T (stpncpy (p->arr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
249 T (stpncpy (p->parr, p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
250
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
251 T (stpncpy (ptr, str, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
252 T (stpncpy (ptr, arr, N + 1)); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound 5" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
253 T (stpncpy (arr, str, N + 1)); /* { dg-warning "writing 5 bytes into a region of size 4 overflows " } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
254
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
255 T (stpncpy (ptr, ptr, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
256 T (stpncpy (ptr, parr, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
257 T (stpncpy (parr, str, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
258
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
259 T (stpncpy (ptr, p->arr, N + 1)); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
260 T (stpncpy (p->arr, p->str, N + 1)); /* { dg-warning "writing 5 bytes into a region of size 4 overflows " } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
261 T (stpncpy (p->parr, p->str, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
262 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
263
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
264
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
265 void test_strcat (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
266 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
267 T (strcat (str, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
268 T (strcat (str, arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
269 T (strcat (arr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
270
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
271 T (strcat (str, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
272 T (strcat (str, parr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
273 T (strcat (parr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
274
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
275 T (strcat (p->str, p->arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
276 T (strcat (p->arr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
277 T (strcat (p->parr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
278 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
279
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
280
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
281 void test_strncat (struct MemArrays *p, unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
282 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
283 T (strncat (str, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
284 T (strncat (str, arr, n)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
285 T (strncat (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
286
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
287 T (strncat (str, ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
288 T (strncat (str, parr, n)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
289 T (strncat (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
290
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
291 T (strncat (p->str, p->arr, n)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
292 T (strncat (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
293 T (strncat (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
294 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
295
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
296
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
297 void test_strcpy (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
298 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
299 T (strcpy (str, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
300 T (strcpy (str, arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
301 T (strcpy (arr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
302
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
303 T (strcpy (str, ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
304 T (strcpy (str, parr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
305 T (strcpy (parr, str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
306
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
307 T (strcpy (p->str, p->arr)); /* { dg-warning "argument 2 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
308 T (strcpy (p->arr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
309 T (strcpy (p->parr, p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
310 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
311
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
312
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
313 void test_strncpy (struct MemArrays *p, unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
314 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
315 T (strncpy (str, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
316 T (strncpy (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
317 T (strncpy (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
318
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
319 T (strncpy (str, ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
320 T (strncpy (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
321 T (strncpy (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
322
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
323 T (strncpy (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
324 T (strncpy (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
325 T (strncpy (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
326 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
327
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
328
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
329 void test_strchr (struct MemArrays *p, int c)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
330 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
331 T (strchr (str, c));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
332 T (strchr (arr, c)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
333
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
334 T (strchr (ptr, c));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
335 T (strchr (parr, c)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
336
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
337 T (strchr (p->str, c));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
338 T (strchr (p->arr, c)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
339 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
340
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
341
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
342 void test_strdup (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
343 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
344 T (strdup (str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
345 T (strdup (arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
346
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
347 T (strdup (ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
348 T (strdup (parr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
349
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
350 T (strdup (p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
351 T (strdup (p->arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
352 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
353
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
354
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
355 void test_stnrdup_nowarn (struct MemArrays *p, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
356 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
357 T (strndup (str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
358 T (strndup (arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
359
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
360 T (strndup (ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
361 T (strndup (parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
362
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
363 T (strndup (p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
364 T (strndup (p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
365 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
366
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
367
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
368 void test_stnrdup_warn (struct MemArrays *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
369 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
370 enum { N = sizeof arr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
371
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
372 T (strndup (str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
373 T (strndup (arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
374
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
375 T (strndup (ptr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
376 T (strndup (parr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
377
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
378 T (strndup (p->str, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
379 T (strndup (p->arr, N));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
380
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
381
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
382 T (strndup (arr, N + 1)); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound 5" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
383 T (strndup (parr, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
384 T (strndup (p->arr, N + 1)); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound 5" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
385 T (strndup (p->parr, N + 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
386 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
387
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
388
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
389 void test_strlen (struct MemArrays *p, char *s NONSTRING, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
390 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
391 T (strlen (str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
392 T (strlen (arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
393
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
394 T (strlen (ptr));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
395 T (strlen (parr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
396
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
397 T (strlen (p->str));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
398 T (strlen (p->arr)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
399
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
400 T (strlen (s)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
401 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
402 strcpy (s, "123");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
403 T (strlen (s));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
404 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
405
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
406 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
407 char a[] __attribute__ ((nonstring)) = { 1, 2, 3 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
408
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
409 T (strlen (a)); /* { dg-warning "argument 1 declared attribute .nonstring." "pr86688" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
410 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
411
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
412 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
413 char a[] __attribute__ ((nonstring)) = { 1, 2, 3, 4 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
414
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
415 strcpy (a, "12");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
416 T (strlen (a));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
417 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
418
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
419 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
420 char *p __attribute__ ((nonstring));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
421 p = (char *)__builtin_malloc (n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
422 __builtin_memset (p, '*', n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
423
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
424 T (strlen (p)); /* { dg-warning "argument 1 declared attribute .nonstring." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
425
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
426 strcpy (p, "12345");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
427 T (strlen (p));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
428 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
429 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
430
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
431
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
432 void test_strnlen (struct MemArrays *p, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
433 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
434 T (strnlen (str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
435 T (strnlen (arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
436
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
437 T (strnlen (ptr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
438 T (strnlen (parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
439
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
440 T (strnlen (p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
441 T (strnlen (p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
442 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
443
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
444
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
445 /* Verify no warnings are issued for raw mempory functions. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
446
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
447 void test_mem_functions (struct MemArrays *p, int c, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
448 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
449 T (memchr (arr, c, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
450 T (memchr (parr, c, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
451 T (memchr (p->arr, c, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
452 T (memchr (p->parr, c, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
453
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
454 T (memcmp (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
455 T (memcmp (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
456 T (memcmp (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
457 T (memcmp (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
458 T (memcmp (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
459 T (memcmp (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
460 T (memcmp (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
461
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
462 T (memcpy (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
463 T (memcpy (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
464 T (memcpy (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
465 T (memcpy (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
466 T (memcpy (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
467 T (memcpy (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
468 T (memcpy (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
469
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
470 T (memmove (str, arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
471 T (memmove (arr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
472 T (memmove (str, parr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
473 T (memmove (parr, str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
474 T (memmove (p->str, p->arr, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
475 T (memmove (p->arr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
476 T (memmove (p->parr, p->str, n));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
477 }