annotate gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Test -Wsizeof-pointer-memaccess warnings. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 /* { dg-do compile } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* { dg-options "-Wsizeof-pointer-memaccess -Wno-stringop-overflow -Wno-stringop-truncation -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 #define bos(ptr) __builtin_object_size (ptr, 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 #define bos0(ptr) __builtin_object_size (ptr, 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define memset(dst, val, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 (FUNC (memset, dst, val, sz, bos (dst)), sink ((dst)))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 #define memcpy(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 (FUNC (memcpy, dst, src, sz, bos (dst)), sink ((dst)))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 #define memmove(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 (FUNC (memmove, dst, src, sz, bos (dst)), sink ((dst)))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 #define mempcpy(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 (FUNC (mempcpy, dst, src, sz, bos (dst)), sink ((dst)))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 #define strncpy(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 (FUNC (strncpy, dst, src, sz, bos (dst)), sink (dst))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 #define strncat(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 (FUNC (strncat, dst, src, sz, bos (dst)), sink (dst))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 #define stpncpy(dst, src, sz) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 (FUNC (stpncpy, dst, src, sz, bos (dst)), sink (dst))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 void sink (void*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 #define S10 "123456789"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 extern char a10[10];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 void test_string_literal (char *dst)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 #define FUNC(f, d, s, n, x) __builtin_ ## f (d, s, n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 /* It's common to call memcpy and other raw memory functions with
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 size drerived from the source argument. Verify that no warning
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 is ussued for such calls. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 memcpy (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 mempcpy (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 memmove (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 memset (dst, 0, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 stpncpy (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 strncpy (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 strncat (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 /* Unlike in the cases above, even though the calls below are likely
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 wrong, it's not easy to detect that the expression (sizeof X - 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 involves sizeof of the source, so no warning is issued here, as
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 helpful as one might be. Whether -Wstringop-truncation is issued
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 is tested elsewhere. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 stpncpy (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 strncpy (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 strncat (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 }
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 test_char_array (char *dst)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 memcpy (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 mempcpy (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 memmove (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 memset (dst, 0, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 stpncpy (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 strncpy (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 strncat (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 stpncpy (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 strncpy (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 strncat (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 #undef FUNC
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 #define FUNC(f, d, s, n, os) __builtin___ ## f ## _chk (d, s, n, os)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 void test_char_array_chk (char *dst)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 memcpy (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 mempcpy (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 memmove (dst, S10, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 memset (dst, 0, sizeof S10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 stpncpy (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 strncpy (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 strncat (dst, S10, sizeof S10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 stpncpy (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 strncpy (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 strncat (dst, S10, sizeof S10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 void test_string_literal_chk (char *dst)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 memcpy (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 mempcpy (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 memmove (dst, a10, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 memset (dst, 0, sizeof a10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 stpncpy (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 strncpy (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 strncat (dst, a10, sizeof a10); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 stpncpy (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 strncpy (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 strncat (dst, a10, sizeof a10 - 1); /* { dg-warning "\\\[-Wsizeof-pointer-memaccess]" "" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 }