1 // RUN: %clang_cc1 -Wstrlcpy-strlcat-size -verify -fsyntax-only %s
3 typedef __SIZE_TYPE__
size_t;
4 size_t strlcpy (char * restrict dst
, const char * restrict src
, size_t size
);
5 size_t strlcat (char * restrict dst
, const char * restrict src
, size_t size
);
6 size_t strlen (const char *s
);
21 strlcpy(s1
, s2
, sizeof(s1
)); // no warning
22 strlcpy(s1
, s2
, sizeof(s2
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}
23 strlcpy(s1
, s3
, strlen(s3
)+1); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}
24 strlcat(s2
, s3
, sizeof(s3
)); // expected-warning {{size argument in 'strlcat' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}
25 strlcpy(s4
.f1
, s2
, sizeof(s2
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}
26 strlcpy((*s5
)->f2
[x
], s2
, sizeof(s2
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}
27 strlcpy(s1
+3, s2
, sizeof(s2
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}}
30 // Don't issue FIXIT for flexible arrays.
36 void flexible_arrays(struct S
*s
) {
38 strlcpy(s
->x
, str
, sizeof(str
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}}
41 // Don't issue FIXIT for destinations of size 1.
46 strlcpy(z
, str
, sizeof(str
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}}
54 strlcpy(z
, str
, sizeof(str
)); // expected-warning {{size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination}} expected-note {{change size argument to be the size of the destination}}