annotate gcc/testsuite/gcc.dg/attr-nonstring-3.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
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/81384 - built-in form of strnlen missing
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 Since the strnlen patch affects the handling for strncmp and other
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 bounded functions, verify that a bound in excess of the maximum
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 object size specified for strncmp is diagnosed regardless of
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 attribute nonstring. Also verify that a bound that's greater than
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 the size of a non-string array is diagnosed, even if it's not in
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 excess of the maximum object size.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 #include "range.h"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 extern int strncmp (const char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 #define STR /* not non-string */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 #define NS __attribute__ ((nonstring))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 #define _CAT(s, n) s ## n
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 #define CAT(s, n) _CAT (s, n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 #define UNIQ(n) CAT (n, __LINE__)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 void sink (int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 #define T(at1, N1, at2, N2, bound) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 do { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 extern at1 char UNIQ (a)[N1]; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 extern at2 char UNIQ (b)[N2]; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 sink (strncmp (UNIQ (a), UNIQ (b), bound)); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 } while (0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 void strncmp_cst (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 size_t n = DIFF_MAX;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 T (STR, /* [] */, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 T (STR, /* [] */, STR, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 T (STR, 1, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 T (STR, 2, STR, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 T (STR, /* [] */, STR, 3, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 T (STR, /* [] */, STR, 4, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 T (STR, /* [] */, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 T (STR, /* [] */, NS, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 T (STR, 5, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 T (STR, 6, NS, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 T (STR, /* [] */, NS, 7, n); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 T (STR, /* [] */, NS, 8, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 T (NS, /* [] */, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 T (NS, /* [] */, STR, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 T (NS, 9, STR, /* [] */, n); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 T (NS, 10, STR, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 T (NS, /* [] */, STR, 11, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 T (NS, /* [] */, STR, 12, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 T (NS, /* [] */, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 T (NS, /* [] */, NS, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 T (NS, 13, NS, /* [] */, n); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 T (NS, 14, NS, /* [] */, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 T (NS, /* [] */, NS, 15, n); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 T (NS, /* [] */, NS, 16, n + 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
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
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 void strncmp_range (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 size_t n = DIFF_MAX;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 n = UR (n, n + 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 T (STR, /* [] */, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 T (STR, /* [] */, STR, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 T (STR, 1, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 T (STR, 2, STR, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 T (STR, /* [] */, STR, 3, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 T (STR, /* [] */, STR, 4, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 T (STR, /* [] */, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 T (STR, /* [] */, NS, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 T (STR, 5, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 T (STR, 6, NS, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 T (STR, /* [] */, NS, 7, n); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 T (STR, /* [] */, NS, 8, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 T (NS, /* [] */, STR, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 T (NS, /* [] */, STR, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 T (NS, 9, STR, /* [] */, n); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 T (NS, 10, STR, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 T (NS, /* [] */, STR, 11, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 T (NS, /* [] */, STR, 12, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 T (NS, /* [] */, NS, /* [] */, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 T (NS, /* [] */, NS, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 T (NS, 13, NS, /* [] */, n); /* { dg-warning "argument 1 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 T (NS, 14, NS, /* [] */, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 T (NS, /* [] */, NS, 15, n); /* { dg-warning "argument 2 declared attribute .nonstring. is smaller than the specified bound" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 T (NS, /* [] */, NS, 16, n + 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 }