This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
warnings.t: skip some leaky tests
[perl5.git] / t / lib / warnings / 7fatal
1 Check FATAL functionality
2
3 __END__
4
5 # Check compile time warning
6 use warnings FATAL => 'syntax' ;
7 {
8     no warnings ;
9     $a =+ 1 ;
10 }
11 $a =+ 1 ;
12 print STDERR "The End.\n" ;
13 EXPECT
14 Reversed += operator at - line 8.
15 ########
16
17 # Check compile time warning
18 use warnings FATAL => 'all' ;
19 {
20     no warnings ;
21     my $a =+ 1 ;
22 }
23 my $a =+ 1 ;
24 print STDERR "The End.\n" ;
25 EXPECT
26 Reversed += operator at - line 8.
27 ########
28
29 # Check runtime scope of pragma
30 use warnings FATAL => 'uninitialized' ;
31 {
32     no warnings ;
33     my $b ; chop $b ;
34 }
35 my $b ; chop $b ;
36 print STDERR "The End.\n" ;
37 EXPECT
38 Use of uninitialized value $b in scalar chop at - line 8.
39 ########
40
41 # Check runtime scope of pragma
42 use warnings FATAL => 'all' ;
43 {
44     no warnings ;
45     my $b ; chop $b ;
46 }
47 my $b ; chop $b ;
48 print STDERR "The End.\n" ;
49 EXPECT
50 Use of uninitialized value $b in scalar chop at - line 8.
51 ########
52
53 # Check runtime scope of pragma
54 no warnings ;
55 {
56     use warnings FATAL => 'uninitialized' ;
57     $a = sub { my $b ; chop $b ; }
58 }
59 &$a ;
60 print STDERR "The End.\n" ;
61 EXPECT
62 Use of uninitialized value $b in scalar chop at - line 6.
63 ########
64
65 # Check runtime scope of pragma
66 no warnings ;
67 {
68     use warnings FATAL => 'all' ;
69     $a = sub { my $b ; chop $b ; }
70 }
71 &$a ;
72 print STDERR "The End.\n" ;
73 EXPECT
74 Use of uninitialized value $b in scalar chop at - line 6.
75 ########
76
77 --FILE-- abc
78 $a =+ 1 ;
79 1;
80 --FILE-- 
81 use warnings FATAL => 'syntax' ;
82 require "./abc";
83 EXPECT
84
85 ########
86
87 --FILE-- abc
88 use warnings FATAL => 'syntax' ;
89 1;
90 --FILE-- 
91 require "./abc";
92 $a =+ 1 ;
93 EXPECT
94
95 ########
96
97 --FILE-- abc
98 use warnings 'syntax' ;
99 $a =+ 1 ;
100 1;
101 --FILE-- 
102 use warnings FATAL => 'uninitialized' ;
103 require "./abc";
104 my $a ; chop $a ;
105 print STDERR "The End.\n" ;
106 EXPECT
107 Reversed += operator at ./abc line 2.
108 Use of uninitialized value $a in scalar chop at - line 3.
109 ########
110
111 --FILE-- abc.pm
112 use warnings 'syntax' ;
113 $a =+ 1 ;
114 1;
115 --FILE-- 
116 use warnings FATAL => 'uninitialized' ;
117 use abc;
118 my $a ; chop $a ;
119 print STDERR "The End.\n" ;
120 EXPECT
121 Reversed += operator at abc.pm line 2.
122 Use of uninitialized value $a in scalar chop at - line 3.
123 ########
124
125 # Check scope of pragma with eval
126 no warnings ;
127 eval {
128     use warnings FATAL => 'uninitialized' ;
129     my $b ; chop $b ;
130 }; print STDERR "-- $@" ;
131 my $b ; chop $b ;
132 print STDERR "The End.\n" ;
133 EXPECT
134 -- Use of uninitialized value $b in scalar chop at - line 6.
135 The End.
136 ########
137
138 # Check scope of pragma with eval
139 use warnings FATAL => 'uninitialized' ;
140 eval {
141     my $b ; chop $b ;
142 }; print STDERR "-- $@" ;
143 my $b ; chop $b ;
144 print STDERR "The End.\n" ;
145 EXPECT
146 -- Use of uninitialized value $b in scalar chop at - line 5.
147 Use of uninitialized value $b in scalar chop at - line 7.
148 ########
149
150 # Check scope of pragma with eval
151 use warnings FATAL => 'uninitialized' ;
152 eval {
153     no warnings ;
154     my $b ; chop $b ;
155 }; print STDERR $@ ;
156 my $b ; chop $b ;
157 print STDERR "The End.\n" ;
158 EXPECT
159 Use of uninitialized value $b in scalar chop at - line 8.
160 ########
161
162 # Check scope of pragma with eval
163 no warnings ;
164 eval {
165     use warnings FATAL => 'syntax' ;
166     $a =+ 1 ;
167 }; print STDERR "-- $@" ;
168 $a =+ 1 ;
169 print STDERR "The End.\n" ;
170 EXPECT
171 Reversed += operator at - line 6.
172 ########
173
174 # Check scope of pragma with eval
175 use warnings FATAL => 'syntax' ;
176 eval {
177     $a =+ 1 ;
178 }; print STDERR "-- $@" ;
179 $a =+ 1 ;
180 print STDERR "The End.\n" ;
181 EXPECT
182 Reversed += operator at - line 5.
183 ########
184
185 # Check scope of pragma with eval
186 use warnings FATAL => 'syntax' ;
187 eval {
188     no warnings ;
189     $a =+ 1 ;
190 }; print STDERR $@ ;
191 $a =+ 1 ;
192 print STDERR "The End.\n" ;
193 EXPECT
194 Reversed += operator at - line 8.
195 ########
196
197 # Check scope of pragma with eval
198 no warnings ;
199 eval {
200     use warnings FATAL => 'syntax' ;
201 }; print STDERR $@ ;
202 $a =+ 1 ;
203 print STDERR "The End.\n" ;
204 EXPECT
205 The End.
206 ########
207
208 # Check scope of pragma with eval
209 no warnings ;
210 eval q[ 
211     use warnings FATAL => 'uninitialized' ;
212     my $b ; chop $b ;
213 ]; print STDERR "-- $@";
214 my $b ; chop $b ;
215 print STDERR "The End.\n" ;
216 EXPECT
217 -- Use of uninitialized value $b in scalar chop at (eval 1) line 3.
218 The End.
219 ########
220
221 # Check scope of pragma with eval
222 use warnings FATAL => 'uninitialized' ;
223 eval '
224     my $b ; chop $b ;
225 '; print STDERR "-- $@" ;
226 my $b ; chop $b ;
227 print STDERR "The End.\n" ;
228 EXPECT
229 -- Use of uninitialized value $b in scalar chop at (eval 1) line 2.
230 Use of uninitialized value $b in scalar chop at - line 7.
231 ########
232
233 # Check scope of pragma with eval
234 use warnings FATAL => 'uninitialized' ;
235 eval '
236     no warnings ;
237     my $b ; chop $b ;
238 '; print STDERR $@ ;
239 my $b ; chop $b ;
240 print STDERR "The End.\n" ;
241 EXPECT
242 Use of uninitialized value $b in scalar chop at - line 8.
243 ########
244
245 # Check scope of pragma with eval
246 no warnings ;
247 eval q[ 
248     use warnings FATAL => 'syntax' ;
249     $a =+ 1 ;
250 ]; print STDERR "-- $@";
251 $a =+ 1 ;
252 print STDERR "The End.\n" ;
253 EXPECT
254 -- Reversed += operator at (eval 1) line 3.
255 The End.
256 ########
257
258 # Check scope of pragma with eval
259 use warnings FATAL => 'syntax' ;
260 eval '
261     $a =+ 1 ;
262 '; print STDERR "-- $@";
263 print STDERR "The End.\n" ;
264 EXPECT
265 -- Reversed += operator at (eval 1) line 2.
266 The End.
267 ########
268
269 # Check scope of pragma with eval
270 use warnings FATAL => 'syntax' ;
271 eval '
272     no warnings ;
273     $a =+ 1 ;
274 '; print STDERR "-- $@";
275 $a =+ 1 ;
276 print STDERR "The End.\n" ;
277 EXPECT
278 Reversed += operator at - line 8.
279 ########
280 # TODO ? !$Config{usethreads} && $::UTF8 && ($ENV{PERL_DESTRUCT_LEVEL} || 0) > 1 ? "Parser leaks OPs, which leak shared hash keys" : ''
281 # SKIP ? $Config{ccflags} =~ /sanitize/
282
283 use warnings 'void' ;
284
285 time ;
286
287 {
288     use warnings FATAL => qw(void) ;
289     $a = "abc";
290     length $a ;
291 }
292
293 join "", 1,2,3 ;
294
295 print "done\n" ;
296 EXPECT
297 Useless use of time in void context at - line 4.
298 Useless use of length in void context at - line 9.
299 ########
300 # TODO ? !$Config{usethreads} && $::UTF8 && ($ENV{PERL_DESTRUCT_LEVEL} || 0) > 1 ? "Parser leaks OPs, which leak shared hash keys" : ''
301 # SKIP ? $Config{ccflags} =~ /sanitize/
302
303 use warnings ;
304
305 time ;
306
307 {
308     use warnings FATAL => qw(void) ;
309     $a = "abc";
310     length $a ;
311 }
312
313 join "", 1,2,3 ;
314
315 print "done\n" ;
316 EXPECT
317 Useless use of time in void context at - line 4.
318 Useless use of length in void context at - line 9.
319 ########
320
321 use warnings FATAL => 'all';
322 {
323     no warnings;
324     my $b ; chop $b;
325     {
326         use warnings ;
327         my $b ; chop $b;
328     }
329 }
330 my $b ; chop $b;
331 print STDERR "The End.\n" ;
332 EXPECT
333 Use of uninitialized value $b in scalar chop at - line 8.
334 Use of uninitialized value $b in scalar chop at - line 11.
335 ########
336
337 use warnings FATAL => 'all';
338 {
339     no warnings FATAL => 'all';
340     my $b ; chop $b;
341     {
342         use warnings ;
343         my $b ; chop $b;
344     }
345 }
346 my $b ; chop $b;
347 print STDERR "The End.\n" ;
348 EXPECT
349 Use of uninitialized value $b in scalar chop at - line 8.
350 Use of uninitialized value $b in scalar chop at - line 11.
351 ########
352
353 use warnings FATAL => 'all';
354 {
355     no warnings 'syntax';
356     {
357         use warnings ;
358         my $b ; chop $b;
359     }
360 }
361 my $b ; chop $b;
362 print STDERR "The End.\n" ;
363 EXPECT
364 Use of uninitialized value $b in scalar chop at - line 7.
365 ########
366
367 use warnings FATAL => 'syntax', NONFATAL => 'void' ;
368
369 $a = "abc";
370 length $a;
371 print STDERR "The End.\n" ;
372 EXPECT
373 Useless use of length in void context at - line 5.
374 The End.
375 ########
376
377 use warnings FATAL => 'all', NONFATAL => 'void' ;
378
379 $a = "abc";
380 length $a;
381 print STDERR "The End.\n" ;
382 EXPECT
383 Useless use of length in void context at - line 5.
384 The End.
385 ########
386
387 use warnings FATAL => 'all', NONFATAL => 'void' ;
388
389 my $a ; chomp $a;
390
391 $b = "abc" ;
392 length $b;
393 print STDERR "The End.\n" ;
394 EXPECT
395 Useless use of length in void context at - line 7.
396 Use of uninitialized value $a in scalar chomp at - line 4.
397 ########
398
399 use warnings FATAL => 'void', NONFATAL => 'void' ;
400 $a = "abc";
401 length $a;
402 print STDERR "The End.\n" ;
403 EXPECT
404 Useless use of length in void context at - line 4.
405 The End.
406 ########
407 # TODO ? !$Config{usethreads} && $::UTF8 && ($ENV{PERL_DESTRUCT_LEVEL} || 0) > 1 ? "Parser leaks OPs, which leak shared hash keys" : ''
408
409 use warnings NONFATAL => 'void', FATAL => 'void' ;
410 $a = "abc";
411 length $a;
412 print STDERR "The End.\n" ;
413 EXPECT
414 Useless use of length in void context at - line 4.
415 ########
416
417 use warnings FATAL => 'all', NONFATAL => 'io';
418 no warnings 'once';
419
420 open(F, "<true\ncd");
421 open(G, "<truecd\n");
422 open(H, "<truecd\n\0");
423 close "fred" ;
424 print STDERR "The End.\n" ;
425 EXPECT
426 Unsuccessful open on filename containing newline at - line 6.
427 Unsuccessful open on filename containing newline at - line 7.
428 close() on unopened filehandle fred at - line 8.
429 The End.
430 ########
431
432 use warnings FATAL => 'all', NONFATAL => 'io', FATAL => 'unopened' ;
433 no warnings 'once';
434
435 open(F, "<truecd\n");
436 close "fred" ;
437 print STDERR "The End.\n" ;
438 EXPECT
439 Unsuccessful open on filename containing newline at - line 5.
440 close() on unopened filehandle fred at - line 6.
441 ########
442
443 # 'use warnings' test as the basis for the following tests
444 use warnings ;
445 my $a = oct "7777777777777777777777777777777777778" ;
446 my $b =+ 1 ;
447 my $c ; chop $c ;
448 print STDERR "The End.\n" ;
449 EXPECT
450 Reversed += operator at - line 5.
451 Integer overflow in octal number at - line 4.
452 Illegal octal digit '8' ignored at - line 4.
453 Octal number > 037777777777 non-portable at - line 4.
454 Use of uninitialized value $c in scalar chop at - line 6.
455 The End.
456 ########
457
458 # 'use warnings NONFATAL=>"all"' should be the same as 'use warnings'
459 use warnings NONFATAL=>"all" ;
460 my $a = oct "7777777777777777777777777777777777778" ;
461 my $b =+ 1 ;
462 my $c ; chop $c ;
463 print STDERR "The End.\n" ;
464 EXPECT
465 Reversed += operator at - line 5.
466 Integer overflow in octal number at - line 4.
467 Illegal octal digit '8' ignored at - line 4.
468 Octal number > 037777777777 non-portable at - line 4.
469 Use of uninitialized value $c in scalar chop at - line 6.
470 The End.
471 ########
472
473 # 'use warnings "NONFATAL"' should be the same as 'use warnings' [perl #120977]
474 use warnings "NONFATAL" ;
475 my $a = oct "7777777777777777777777777777777777778" ;
476 my $b =+ 1 ;
477 my $c ; chop $c ;
478 print STDERR "The End.\n" ;
479 EXPECT
480 Reversed += operator at - line 5.
481 Integer overflow in octal number at - line 4.
482 Illegal octal digit '8' ignored at - line 4.
483 Octal number > 037777777777 non-portable at - line 4.
484 Use of uninitialized value $c in scalar chop at - line 6.
485 The End.
486 ########
487
488 # 'use warnings "FATAL"' should be the same as 'use warnings FATAL=>"all"' [perl #120977]
489 use warnings "FATAL" ;
490 {
491     no warnings ;
492     my $a =+ 1 ;
493 }
494 my $a =+ 1 ;
495 print STDERR "The End.\n" ;
496 EXPECT
497 Reversed += operator at - line 8.
498 ########
499
500 # 'use warnings "FATAL"' should be the same as 'use warnings FATAL=>"all"' [perl #120977]
501 use warnings "FATAL" ;
502 {
503     no warnings ;
504     my $a = oct "7777777777777777777777777777777777778" ;
505 }
506 my $a = oct "7777777777777777777777777777777777778" ;
507 print STDERR "The End.\n" ;
508 EXPECT
509 Integer overflow in octal number at - line 8.
510 ########
511
512 # 'no warnings FATAL=>"all"' should be the same as 'no warnings'
513 use warnings ;
514 {
515     no warnings FATAL=>"all" ;
516     my $a = oct "7777777777777777777777777777777777778" ;
517     my $b =+ 1 ;
518     my $c ; chop $c ;
519 }
520 my $a =+ 1 ;
521 print STDERR "The End.\n" ;
522 EXPECT
523 Reversed += operator at - line 10.
524 The End.
525 ########
526
527 # 'no warnings "FATAL"' should be the same as 'no warnings' [perl #120977]
528 use warnings ;
529 {
530     no warnings "FATAL" ;
531     my $a = oct "7777777777777777777777777777777777778" ;
532     my $b =+ 1 ;
533     my $c ; chop $c ;
534 }
535 my $a =+ 1 ;
536 print STDERR "The End.\n" ;
537 EXPECT
538 Reversed += operator at - line 10.
539 The End.
540 ########
541
542 # fatal warnings shouldn't hide parse errors [perl #122966]
543 use warnings FATAL => 'all';
544 if (1 {
545     my $x = "hello";
546     print $x, "\n";
547 }
548 EXPECT
549 syntax error at - line 4, near "1 {"
550 "my" variable $x masks earlier declaration in same statement at - line 6.
551 syntax error at - line 7, near "}"
552 Execution of - aborted due to compilation errors.
553 ########
554
555 # fatal warnings in DESTROY should be made non-fatal [perl #123398]
556 # This test will blow up your memory with SEGV without the patch
557 package Foo;
558 use strict; use utf8; use warnings FATAL => 'all';
559 sub new {
560     return bless{ 'field' => undef }, 'Foo';
561 }
562 sub DESTROY {
563     my $self = shift;
564     $self->{'field'}->missing_method;
565 }
566 package main;
567 my $foo = new Foo;
568 undef($foo);
569 EXPECT
570         (in cleanup) Can't call method "missing_method" on an undefined value at - line 11.