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