]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/attr-nonstring-4.c
1 /* PR middle-end/81384 - built-in form of strnlen missing
3 Verify that a strnlen bound in excess of the maximum object size
4 is diagnosed regardless of attribute nonstring. Also verify that
5 a bound that's greater than the size of a non-string array is
6 diagnosed, even if it's not in excess of the maximum object size.
9 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
13 extern size_t strnlen (const char*, size_t);
15 #define STR /* not non-string */
16 #define NS __attribute__ ((nonstring))
18 #define _CAT(s, n) s ## n
19 #define CAT(s, n) _CAT (s, n)
20 #define UNIQ(n) CAT (n, __LINE__)
24 #define T(attr, N, bound) \
26 extern attr char UNIQ (a)[N]; \
27 sink (strnlen (UNIQ (a), bound)); \
30 void strnlen_cst (void)
35 T (STR
, /* [] */, n
+ 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
38 T (STR
, 2, n
+ 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
41 T (NS
, /* [] */, n
+ 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
43 T (NS
, 9, n
); /* { dg-warning "argument 1 declared attribute 'nonstring' is smaller than the specified bound \\d+|specified bound \\d+ exceeds source size 9" } */
44 T (NS
, 10, n
+ 1); /* { dg-warning "specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+" } */
48 void strnlen_range (void)
54 T (STR
, /* [] */, n
+ 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
56 T (STR
, 1, n
); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds source size 1" } */
57 T (STR
, 2, n
+ 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
60 T (NS
, /* [] */, n
+ 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */
62 T (NS
, 9, n
); /* { dg-warning "argument 1 declared attribute 'nonstring' is smaller than the specified bound \\\[\\d+, \\d+]|specified bound \\\[\\d+, \\d+] exceeds source size 9" } */
63 T (NS
, 10, n
+ 1); /* { dg-warning "specified bound \\\[\[0-9\]+, \[0-9\]+] exceeds maximum object size \[0-9\]+" } */