Deprecate literal unescaped "{" in regexes.
[perl.git] / t / lib / warnings / regcomp
1   regcomp.c     AOK
2
3   Quantifier unexpected on zero-length expression [S_study_chunk] 
4
5   Useless (%s%c) - %suse /%c modifier [S_reg] 
6   Useless (%sc) - %suse /gc modifier [S_reg] 
7
8
9
10   Strange *+?{} on zero-length expression       [S_study_chunk]
11         /(?=a)?/
12
13   %.*s matches null string many times           [S_regpiece]
14         $a = "ABC123" ; $a =~ /(?=a)*/'
15
16   /%.127s/: Unrecognized escape \\%c passed through     [S_regatom] 
17         $x = '\m' ; /$x/
18
19   POSIX syntax [%c %c] belongs inside character classes [S_checkposixcc] 
20
21
22   Character class [:%.*s:] unknown      [S_regpposixcc]
23
24   Character class syntax [%c %c] belongs inside character classes [S_checkposixcc] 
25   
26   /%.127s/: false [] range \"%*.*s\" in regexp [S_regclass]
27
28   /%.127s/: false [] range \"%*.*s\" in regexp [S_regclassutf8]
29
30   /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclass] 
31
32   /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclassutf8] 
33
34   False [] range \"%*.*s\" [S_regclass]
35
36 __END__
37 # regcomp.c [S_regpiece]
38 use warnings 'regexp' ;
39 my $a = "ABC123" ; 
40 $a =~ /(?=a)*/ ;
41 no warnings 'regexp' ;
42 $a =~ /(?=a)*/ ;
43 EXPECT
44 (?=a)* matches null string many times in regex; marked by <-- HERE in m/(?=a)* <-- HERE / at - line 4.
45 ########
46 # regcomp.c [S_regatom]
47 $x = '\m' ;
48 use warnings 'regexp' ;
49 $a =~ /a$x/ ;
50 no warnings 'regexp' ;
51 $a =~ /a$x/ ;
52 EXPECT
53 Unrecognized escape \m passed through in regex; marked by <-- HERE in m/a\m <-- HERE / at - line 4.
54 ########
55 # regcomp.c [S_regatom]
56 # The \q should warn, the \_ should NOT warn.
57 use warnings 'regexp';
58 "foo" =~ /\q/;
59 "foo" =~ /\q{/;
60 "foo" =~ /\w{/;
61 "foo" =~ /a\b{cde/;
62 "foo" =~ /a\B{cde/;
63 "bar" =~ /\_/;
64 no warnings 'regexp';
65 "foo" =~ /\q/;
66 "foo" =~ /\q{/;
67 "foo" =~ /\w{/;
68 "foo" =~ /a\b{cde/;
69 "foo" =~ /a\B{cde/;
70 "bar" =~ /\_/;
71 EXPECT
72 Unrecognized escape \q passed through in regex; marked by <-- HERE in m/\q <-- HERE / at - line 4.
73 Unrecognized escape \q passed through in regex; marked by <-- HERE in m/\q <-- HERE {/ at - line 5.
74 Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\q{ <-- HERE / at - line 5.
75 Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\w{ <-- HERE / at - line 6.
76 Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/a\b{ <-- HERE cde/ at - line 7.
77 Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/a\B{ <-- HERE cde/ at - line 8.
78 ########
79 # regcomp.c [S_regpposixcc S_checkposixcc]
80 #
81 use warnings 'regexp' ;
82 $_ = "" ;
83 /[:alpha:]/;
84 /[:zog:]/;
85 no warnings 'regexp' ;
86 /[:alpha:]/;
87 /[:zog:]/;
88 EXPECT
89 POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:alpha:] <-- HERE / at - line 5.
90 POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:zog:] <-- HERE / at - line 6.
91 ########
92 # regcomp.c [S_checkposixcc]
93 #
94 use warnings 'regexp' ;
95 $_ = "" ;
96 /[.zog.]/;
97 no warnings 'regexp' ;
98 /[.zog.]/;
99 EXPECT
100 POSIX syntax [. .] belongs inside character classes in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5.
101 POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5.
102 ########
103 # regcomp.c [S_regclass]
104 $_ = "";
105 use warnings 'regexp' ;
106 /[a-b]/;
107 /[a-\d]/;
108 /[\d-b]/;
109 /[\s-\d]/;
110 /[\d-\s]/;
111 /[a-[:digit:]]/;
112 /[[:digit:]-b]/;
113 /[[:alpha:]-[:digit:]]/;
114 /[[:digit:]-[:alpha:]]/;
115 no warnings 'regexp' ;
116 /[a-b]/;
117 /[a-\d]/;
118 /[\d-b]/;
119 /[\s-\d]/;
120 /[\d-\s]/;
121 /[a-[:digit:]]/;
122 /[[:digit:]-b]/;
123 /[[:alpha:]-[:digit:]]/;
124 /[[:digit:]-[:alpha:]]/;
125 EXPECT
126 False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 5.
127 False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 6.
128 False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 7.
129 False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 8.
130 False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 9.
131 False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 10.
132 False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 11.
133 False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 12.
134 ########
135 # regcomp.c [S_regclassutf8]
136 BEGIN {
137     if (ord("\t") == 5) {
138         print "SKIPPED\n# ebcdic regular expression ranges differ.";
139         exit 0;
140     }
141 }
142 use utf8;
143 $_ = "";
144 use warnings 'regexp' ;
145 /[a-b]/;
146 /[a-\d]/;
147 /[\d-b]/;
148 /[\s-\d]/;
149 /[\d-\s]/;
150 /[a-[:digit:]]/;
151 /[[:digit:]-b]/;
152 /[[:alpha:]-[:digit:]]/;
153 /[[:digit:]-[:alpha:]]/;
154 no warnings 'regexp' ;
155 /[a-b]/;
156 /[a-\d]/;
157 /[\d-b]/;
158 /[\s-\d]/;
159 /[\d-\s]/;
160 /[a-[:digit:]]/;
161 /[[:digit:]-b]/;
162 /[[:alpha:]-[:digit:]]/;
163 /[[:digit:]-[:alpha:]]/;
164 EXPECT
165 False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 12.
166 False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 13.
167 False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 14.
168 False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 15.
169 False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 16.
170 False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 17.
171 False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 18.
172 False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 19.
173 ########
174 # regcomp.c [S_regclass S_regclassutf8]
175 use warnings 'regexp' ;
176 $a =~ /[a\zb]/ ;
177 no warnings 'regexp' ;
178 $a =~ /[a\zb]/ ;
179 EXPECT
180 Unrecognized escape \z in character class passed through in regex; marked by <-- HERE in m/[a\z <-- HERE b]/ at - line 3.
181
182 ########
183 # regcomp.c [S_reg]
184 use warnings 'regexp' ;
185 $a = qr/(?c)/;
186 $a = qr/(?-c)/;
187 $a = qr/(?g)/;
188 $a = qr/(?-g)/;
189 $a = qr/(?o)/;
190 $a = qr/(?-o)/;
191 $a = qr/(?g-o)/;
192 $a = qr/(?g-c)/;
193 $a = qr/(?o-cg)/;  # (?c) means (?g) error won't be thrown
194 $a = qr/(?ogc)/;
195 no warnings 'regexp' ;
196 $a = qr/(?c)/;
197 $a = qr/(?-c)/;
198 $a = qr/(?g)/;
199 $a = qr/(?-g)/;
200 $a = qr/(?o)/;
201 $a = qr/(?-o)/;
202 $a = qr/(?g-o)/;
203 $a = qr/(?g-c)/;
204 $a = qr/(?o-cg)/;  # (?c) means (?g) error won't be thrown
205 $a = qr/(?ogc)/;
206 #EXPECT
207 EXPECT
208 Useless (?c) - use /gc modifier in regex; marked by <-- HERE in m/(?c <-- HERE )/ at - line 3.
209 Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?-c <-- HERE )/ at - line 4.
210 Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE )/ at - line 5.
211 Useless (?-g) - don't use /g modifier in regex; marked by <-- HERE in m/(?-g <-- HERE )/ at - line 6.
212 Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE )/ at - line 7.
213 Useless (?-o) - don't use /o modifier in regex; marked by <-- HERE in m/(?-o <-- HERE )/ at - line 8.
214 Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE -o)/ at - line 9.
215 Useless (?-o) - don't use /o modifier in regex; marked by <-- HERE in m/(?g-o <-- HERE )/ at - line 9.
216 Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE -c)/ at - line 10.
217 Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?g-c <-- HERE )/ at - line 10.
218 Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE -cg)/ at - line 11.
219 Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?o-c <-- HERE g)/ at - line 11.
220 Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE gc)/ at - line 12.
221 Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?og <-- HERE c)/ at - line 12.
222 Useless (?c) - use /gc modifier in regex; marked by <-- HERE in m/(?ogc <-- HERE )/ at - line 12.
223 ########
224 # regcomp.c [S_regatom]
225 $a = qr/\o{/;
226 EXPECT
227 Missing right brace on \o{ in regex; marked by <-- HERE in m/\o{ <-- HERE / at - line 2.
228 ########
229 # regcomp.c [S_regatom]
230 $a = qr/\o/;
231 EXPECT
232 Missing braces on \o{} in regex; marked by <-- HERE in m/\o <-- HERE / at - line 2.
233 ########
234 # regcomp.c [S_regatom]
235 $a = qr/\o{}/;
236 EXPECT
237 Number with no digits in regex; marked by <-- HERE in m/\o{} <-- HERE / at - line 2.
238 ########
239 # regcomp.c [S_regclass]
240 $a = qr/[\o{]/;
241 EXPECT
242 Missing right brace on \o{ in regex; marked by <-- HERE in m/[\o{ <-- HERE ]/ at - line 2.
243 ########
244 # regcomp.c [S_regclass]
245 $a = qr/[\o]/;
246 EXPECT
247 Missing braces on \o{} in regex; marked by <-- HERE in m/[\o <-- HERE ]/ at - line 2.
248 ########
249 # regcomp.c [S_regclass]
250 $a = qr/[\o{}]/;
251 EXPECT
252 Number with no digits in regex; marked by <-- HERE in m/[\o{} <-- HERE ]/ at - line 2.
253 ########
254 # regcomp.c [S_regclass]
255 use warnings 'regexp' ;
256 $a = qr/[\8\9]/;
257 $a = qr/[\_\0]/; # Should have no warnings on this and the remainder of this test
258 $a = qr/[\07]/;
259 $a = qr/[\006]/;
260 $a = qr/[\0005]/;
261 no warnings 'regexp' ;
262 $a = qr/[\8\9]/;
263 EXPECT
264 Unrecognized escape \8 in character class passed through in regex; marked by <-- HERE in m/[\8 <-- HERE \9]/ at - line 3.
265 Unrecognized escape \9 in character class passed through in regex; marked by <-- HERE in m/[\8\9 <-- HERE ]/ at - line 3.
266 ########
267 # regcomp.c [Perl_re_compile]
268 $a = qr/(?^-i:foo)/;
269 EXPECT
270 Sequence (?^-...) not recognized in regex; marked by <-- HERE in m/(?^- <-- HERE i:foo)/ at - line 2.