annotate gcc/testsuite/c-c++-common/Wstringop-truncation-4.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR middle-end/84725 - enable attribute nonstring for all narrow character
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 types
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 Verify that -Wstringop-truncation is issued for uses of arrays and
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 pointers to qualified forms of characters of all three types.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 { dg-do compile }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
6 { dg-options "-O2 -Wall -Wstringop-truncation -fno-ipa-icf" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #if __cplusplus
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 extern "C"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 char* strncpy (char*, const char*, __SIZE_TYPE__);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 #define S "1234"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 struct Arrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 char a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 signed char b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 unsigned char c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 void test_arrays (struct Arrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
24 /* Expect accesses to all three arrays to trigger the warning,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
25 including the trailing one. The size argument is a good
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
26 enough indication that it is not being used as a "legacy"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
27 flexible array member. */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 strncpy (p->a, s, sizeof p->a); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 strncpy ((char*)p->b, s, sizeof p->b); /* { dg-warning "\\\[-Wstringop-truncation" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
30 strncpy ((char*)p->c, s, sizeof p->c); /* { dg-warning "\\\[-Wstringop-truncation" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 struct Pointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 char *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 signed char *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 unsigned char *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 void test_pointers (struct Pointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 strncpy (p->p, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 strncpy ((char*)p->q, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 strncpy ((char*)p->r, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 struct ConstArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 const char a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 const signed char b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 const unsigned char c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 void test_const_arrays (struct ConstArrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
56 /* Expect accesses to all three arrays to trigger the warning,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
57 including the trailing one. */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 strncpy ((char*)p->a, s, sizeof p->a); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 strncpy ((char*)p->b, s, sizeof p->b); /* { dg-warning "\\\[-Wstringop-truncation" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
60 strncpy ((char*)p->c, s, sizeof p->c); /* { dg-warning "\\\[-Wstringop-truncation" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 struct ConstPointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 const char *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 const signed char *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 const unsigned char *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 void test_const_pointers (struct ConstPointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 strncpy ((char*)p->p, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 strncpy ((char*)p->q, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 strncpy ((char*)p->r, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 struct VolatileArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 volatile char a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 volatile signed char b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 volatile unsigned char c[4];
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_volatile_arrays (struct VolatileArrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
86 /* Expect accesses to all three arrays to trigger the warning,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
87 including the trailing one. */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 strncpy ((char*)p->a, s, sizeof p->a); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 strncpy ((char*)p->b, s, sizeof p->b); /* { dg-warning "\\\[-Wstringop-truncation" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
90 strncpy ((char*)p->c, s, sizeof p->c); /* { dg-warning "\\\[-Wstringop-truncation" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 struct VolatilePointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 volatile char *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 volatile signed char *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 volatile unsigned char *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 void test_volatile_pointers (struct VolatilePointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 strncpy ((char*)p->p, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 strncpy ((char*)p->q, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 strncpy ((char*)p->r, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 struct ConstVolatileArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 const volatile char a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 const volatile signed char b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 const volatile unsigned char c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 void test_const_volatile_arrays (struct ConstVolatileArrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
116 /* Expect accesses to all three arrays to trigger the warning,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
117 including the trailing one. */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 strncpy ((char*)p->a, s, sizeof p->a); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 strncpy ((char*)p->b, s, sizeof p->b); /* { dg-warning "\\\[-Wstringop-truncation" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
120 strncpy ((char*)p->c, s, sizeof p->c); /* { dg-warning "\\\[-Wstringop-truncation" } */
131
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 struct ConstVolatilePointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 const volatile char *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 const volatile signed char *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 const volatile unsigned char *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 void test_const_volatile_pointers (struct ConstVolatilePointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 strncpy ((char*)p->p, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 strncpy ((char*)p->q, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 strncpy ((char*)p->r, S, sizeof S - 1); /* { dg-warning "\\\[-Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 /* { dg-prune-output "-Wdiscarded-qualifiers" } */