annotate gcc/testsuite/c-c++-common/attr-nonstring-5.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 /* 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 using attribute nonstring with all three narrow character
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 types is accepted and using arrays and pointers to characters of all
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 three types (including their qualified forms) declared with the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 attributes doesn't trigger -Wstringop-truncation warnings.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 { dg-options "-O -Wall -Wstringop-truncation" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #if __cplusplus
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 extern "C"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 char* strncpy (char*, const char*, __SIZE_TYPE__);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 #define NONSTR __attribute__ ((nonstring))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 #define S "1234"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 struct Arrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 char NONSTR a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 signed char NONSTR b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 unsigned char NONSTR c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 void test_arrays (struct Arrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 strncpy (p->a, s, sizeof p->a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 strncpy ((char*)p->b, s, sizeof p->b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 strncpy ((char*)p->c, s, sizeof p->c);
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 NONSTR *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 signed char NONSTR *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 unsigned char NONSTR *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);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 strncpy ((char*)p->q, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 strncpy ((char*)p->r, S, sizeof S - 1);
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 NONSTR a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 const signed char NONSTR b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 const unsigned char NONSTR 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 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 strncpy ((char*)p->a, s, sizeof p->a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 strncpy ((char*)p->b, s, sizeof p->b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 strncpy ((char*)p->c, s, sizeof p->c);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 struct ConstPointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 const char NONSTR *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 const signed char NONSTR *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 const unsigned char NONSTR *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 void test_const_pointers (struct ConstPointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 strncpy ((char*)p->p, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 strncpy ((char*)p->q, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 strncpy ((char*)p->r, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 struct VolatileArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 volatile char NONSTR a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 volatile signed char NONSTR b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 volatile unsigned char NONSTR c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 void test_volatile_arrays (struct VolatileArrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 strncpy ((char*)p->a, s, sizeof p->a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 strncpy ((char*)p->b, s, sizeof p->b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 strncpy ((char*)p->c, s, sizeof p->c);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 struct VolatilePointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 volatile char NONSTR *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 volatile signed char NONSTR *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 volatile unsigned char NONSTR *r;
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 void test_volatile_pointers (struct VolatilePointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 strncpy ((char*)p->p, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 strncpy ((char*)p->q, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 strncpy ((char*)p->r, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 struct ConstVolatileArrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 const volatile char NONSTR a[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 const volatile signed char NONSTR b[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 const volatile unsigned char NONSTR c[4];
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_const_volatile_arrays (struct ConstVolatileArrays *p, const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 strncpy ((char*)p->a, s, sizeof p->a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 strncpy ((char*)p->b, s, sizeof p->b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 strncpy ((char*)p->c, s, sizeof p->c);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 struct ConstVolatilePointers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 const volatile char NONSTR *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 const volatile signed char NONSTR *q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 const volatile unsigned char NONSTR *r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 void test_const_volatile_pointers (struct ConstVolatilePointers *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 strncpy ((char*)p->p, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 strncpy ((char*)p->q, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 strncpy ((char*)p->r, S, sizeof S - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 /* { dg-prune-output "-Wdiscarded-qualifiers" } */