annotate gcc/testsuite/gcc.dg/attr-nonstring.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/85359 - duplicate -Wstringop-overflow for a strcmp call
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 with a nonstring pointer
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-options "-O2 -Wall" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 typedef __SIZE_TYPE__ size_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef __builtin_va_list va_list;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 int printf (const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 int puts (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 int puts_unlocked (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 int sprintf (char*, const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 int snprintf (char*, size_t, const char*, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 int vsprintf (char*, const char*, va_list);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 int vsnprintf (char*, size_t, const char*, va_list);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 int strcmp (const char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 int strncmp (const char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 char* stpcpy (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 char* stpncpy (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 char* strcat (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 char* strncat (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 char* strcpy (char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 char* strncpy (char*, const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 char* strchr (const char*, int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 char* strrchr (const char*, int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 char* strstr (const char*, const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 char* strdup (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 size_t strlen (const char*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 size_t strnlen (const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 char* strndup (const char*, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 #define NONSTRING __attribute__ ((nonstring))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 extern char ns5[5] NONSTRING;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 int strcmp_nonstring_1 (NONSTRING const char *a, const char *b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 /* dg-warning matches one or more instances of the warning so it's
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 no good on its own. Use dg-regexp instead to verify that just
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 one instance of the warning is issued. See gcc.dg/pr64223-1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 for a different approach. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 return strcmp (a, b); /* { dg-regexp "\[^\n\r\]+: warning: .strcmp. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strcmp" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 int strcmp_nonstring_2 (const char *a, NONSTRING const char *b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 return strcmp (a, b); /* { dg-regexp "\[^\n\r\]+: warning: .strcmp. argument 2 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strcmp" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 int strncmp_nonstring_1 (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 return strncmp (s, ns5, sizeof ns5 + 1); /* { dg-regexp "\[^\n\r\]+: warning: .strncmp. argument 2 declared attribute .nonstring. \[^\n\r\]+ \\\[-Wstringop-overflow=]" "strncmp" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 int strncmp_nonstring_2 (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 return strncmp (ns5, s, sizeof ns5 + 1); /* { dg-regexp "\[^\n\r\]+: warning: .strncmp. argument 1 declared attribute .nonstring. \[^\n\r\]+ \\\[-Wstringop-overflow=]" "strncmp" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 char* stpcpy_nonstring (char *d, NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 return stpcpy (d, s); /* { dg-regexp "\[^\n\r\]+: warning: .stpcpy. argument 2 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "stpcpy" } */
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 char* stpncpy_nonstring (char *d)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 return stpncpy (d, ns5, sizeof ns5 + 1); /* { dg-regexp "\[^\n\r\]+: warning: .stpncpy. argument 2 declared attribute .nonstring. \[^\n\r\]+ \\\[-Wstringop-overflow=]" "stpncpy" } */
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 char* strchr_nonstring (NONSTRING const char *s, int c)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 return strchr (s, c); /* { dg-regexp "\[^\n\r\]+: warning: .strchr. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strchr" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 char* strrchr_nonstring (NONSTRING const char *s, int c)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 return strrchr (s, c); /* { dg-regexp "\[^\n\r\]+: warning: .strrchr. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strrchr" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 char* strcpy_nonstring (char *d, NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 return strcpy (d, s); /* { dg-regexp "\[^\n\r\]+: warning: .strcpy. argument 2 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 char* strncpy_nonstring (char *d)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 return strncpy (d, ns5, sizeof ns5 + 1); /* { dg-regexp "\[^\n\r\]+: warning: .strncpy. argument 2 declared attribute .nonstring. \[^\n\r\]+ \\\[-Wstringop-overflow=]" "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 char* strstr_nonstring_1 (NONSTRING const char *a, const char *b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 return strstr (a, b); /* { dg-regexp "\[^\n\r\]+: warning: .strstr. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strstr" } */
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 char* strstr_nonstring_2 (const char *a, NONSTRING const char *b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 return strstr (a, b); /* { dg-regexp "\[^\n\r\]+: warning: .strstr. argument 2 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strstr" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 char* stdup_nonstring (NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 return strdup (s); /* { dg-regexp "\[^\n\r\]+: warning: .strdup. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strdup" } */
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 size_t strlen_nonstring (NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 return strlen (s); /* { dg-regexp "\[^\n\r\]+: warning: .strlen. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "strlen" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 int printf_nonstring (NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 return printf (s); /* { dg-regexp "\[^\n\r\]+: warning: .printf. argument 1 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "printf" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 int sprintf_nonstring_2 (char *d, NONSTRING const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 return sprintf (d, s); /* { dg-regexp "\[^\n\r\]+: warning: .sprintf. argument 2 declared attribute .nonstring. \\\[-Wstringop-overflow=]" "sprintf" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 }