This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cleaned up warning messages in pad.c, plus related tests.
[perl5.git] / t / lib / warnings / pad
1   pad.c         AOK
2
3      "%s" variable %s masks earlier declaration in same scope
4         my $x;
5         my $x ;
6
7      Variable "%s" will not stay shared 
8         sub x {
9             my $x;
10             sub y {
11                 sub { $x }
12             }
13         }
14
15         sub x {
16             my $x;
17             sub y {
18                 $x
19             }
20         }
21
22     "our" variable %s redeclared        (Did you mean "local" instead of "our"?)
23         our $x;
24         {
25             our $x;
26         }
27
28     %s never introduced         [pad_leavemy]   TODO
29     
30 __END__
31 # pad.c
32 use warnings 'misc' ;
33 my $x ;
34 my $x ;
35 my $y = my $y ;
36 my $p ;
37 package X ;
38 my $p ;
39 package main ;
40 no warnings 'misc' ;
41 my $x ;
42 my $y ;
43 my $p ;
44 EXPECT
45 "my" variable $x masks earlier declaration in same scope at - line 4.
46 "my" variable $y masks earlier declaration in same statement at - line 5.
47 "my" variable $p masks earlier declaration in same scope at - line 8.
48 ########
49 # pad.c
50 use warnings 'misc' ;
51 our $x ;
52 my $x ;
53 our $y = my $y ;
54 our $p ;
55 package X ;
56 my $p ;
57 package main ;
58 no warnings 'misc' ;
59 our $z ;
60 my $z ;
61 our $t = my $t ;
62 our $q ;
63 package X ;
64 my $q ;
65 EXPECT
66 "my" variable $x masks earlier declaration in same scope at - line 4.
67 "my" variable $y masks earlier declaration in same statement at - line 5.
68 "my" variable $p masks earlier declaration in same scope at - line 8.
69 ########
70 # pad.c
71 use warnings 'misc' ;
72 my $x ;
73 our $x ;
74 my $y = our $y ;
75 my $p ;
76 package X ;
77 our $p ;
78 package main ;
79 no warnings 'misc' ;
80 my $z ;
81 our $z ;
82 my $t = our $t ;
83 my $q ;
84 package X ;
85 our $q ;
86 EXPECT
87 "our" variable $x masks earlier declaration in same scope at - line 4.
88 "our" variable $y masks earlier declaration in same statement at - line 5.
89 "our" variable $p masks earlier declaration in same scope at - line 8.
90 ########
91 # pad.c
92 use warnings 'closure' ;
93 sub x {
94       my $x;
95       sub y {
96          $x
97       }
98    }
99 EXPECT
100 Variable "$x" will not stay shared at - line 7.
101 ########
102 # pad.c
103 no warnings 'closure' ;
104 sub x {
105       my $x;
106       sub y {
107          $x
108       }
109    }
110 EXPECT
111
112 ########
113 # pad.c
114 use warnings 'closure' ;
115 sub x {
116       my $x;
117       sub y {
118          sub { $x }
119       }
120    }
121 EXPECT
122 Variable "$x" will not stay shared at - line 6.
123 ########
124 # pad.c
125 use warnings 'closure' ;
126 sub x {
127     my $x;
128     sub {
129         $x;
130         sub y {
131             $x
132         }
133     }->();
134 }
135 EXPECT
136 Variable "$x" will not stay shared at - line 9.
137 ########
138 # pad.c
139 use warnings 'closure' ;
140 my $x;
141 sub {
142     $x;
143     sub f {
144         sub { $x }->();
145     }
146 }->();
147 EXPECT
148
149 ########
150 # pad.c
151 use warnings 'closure' ;
152 sub {
153     my $x;
154     sub f { $x }
155 }->();
156 EXPECT
157 Variable "$x" is not available at - line 5.
158 ########
159 # pad.c
160 use warnings 'closure' ;
161 sub {
162     my $x;
163     eval 'sub f { $x }';
164 }->();
165 EXPECT
166
167 ########
168 # pad.c
169 use warnings 'closure' ;
170 sub {
171     my $x;
172     sub f { eval '$x' }
173 }->();
174 f();
175 EXPECT
176 Variable "$x" is not available at (eval 1) line 2.
177 ########
178 # pad.c
179 use warnings 'closure' ;
180 sub x {
181       our $x;
182       sub y {
183          $x
184       }
185    }
186 EXPECT
187
188 ########
189 # pad.c
190 # see bugid 1754
191 use warnings 'closure' ;
192 sub f {
193     my $x;
194     sub { eval '$x' };
195 }
196 f()->();
197 EXPECT
198 Variable "$x" is not available at (eval 1) line 2.
199 ########
200 use warnings 'closure' ;
201 {
202     my $x = 1;
203     $y = \$x; # force abandonment rather than clear-in-place at scope exit
204     sub f2 { eval '$x' }
205 }
206 f2();
207 EXPECT
208 Variable "$x" is not available at (eval 1) line 2.
209 ########
210 use warnings 'closure' ;
211 for my $x (1,2,3) {
212     sub f { eval '$x' }
213     f();
214 }
215 f();
216 EXPECT
217 Variable "$x" is not available at (eval 4) line 2.
218 ########
219 # pad.c
220 no warnings 'closure' ;
221 sub x {
222       my $x;
223       sub y {
224          sub { $x }
225       }
226    }
227 EXPECT
228
229 ########
230 use warnings 'misc' ;
231 my $x;
232 {
233     my $x;
234 }
235 EXPECT
236 ########
237 # pad.c
238 use warnings 'misc' ;
239 our $x ;
240 our $x ;
241 our $y = our $y ;
242 our $p ;
243 package X ;
244 our $p ;
245 package main ;
246 no warnings 'misc' ;
247 our $a ;
248 our $a ;
249 our $b = our $b ;
250 our $c ;
251 package X ;
252 our $c ;
253 EXPECT
254 "our" variable $x redeclared at - line 4.
255 "our" variable $y redeclared at - line 5.
256 ########
257 use warnings 'misc' ;
258 our $x;
259 {
260     our $x;
261 }
262 our $x;
263 no warnings 'misc' ;
264 our $y;
265 {
266     our $y;
267 }
268 our $y;
269 EXPECT
270 "our" variable $x redeclared at - line 4.
271         (Did you mean "local" instead of "our"?)
272 "our" variable $x redeclared at - line 6.
273 ########
274 use warnings 'misc' ;
275 our $x;
276 {
277     my $x;
278 }
279 no warnings 'misc' ;
280 our $y;
281 {
282     my $y;
283 }
284 EXPECT
285 ########
286 use warnings 'misc' ;
287 my $x;
288 {
289     our $x;
290 }
291 no warnings 'misc' ;
292 my $y;
293 {
294     our $y;
295 }
296 EXPECT
297 ########
298 use warnings 'misc' ;
299 my $x;
300 {
301     my $x;
302 }
303 no warnings 'misc' ;
304 my $y;
305 {
306     my $y;
307 }
308 EXPECT
309 ########
310 # an our var being introduced should suppress errors about global syms
311 use strict;
312 use warnings;
313 our $x unless $x;
314 EXPECT
315 ########
316 use warnings 'misc';
317 our $qunckkk;
318 our $_;
319 package clank_est;
320 our $qunckkk;
321 our $_;
322 no warnings 'misc';
323 our $ouch;
324 our $_;
325 package whack;
326 our $ouch;
327 our $_;
328 EXPECT
329 "our" variable $_ redeclared at - line 6.
330 ########
331 use warnings 'misc';
332 BEGIN { binmode STDERR, 'utf8'; }
333 {
334     use utf8;
335     my $ニコニコ;
336     my $ニコニコ;
337 }
338 EXPECT
339 "my" variable $ニコニコ masks earlier declaration in same scope at - line 6.
340 ########
341 use warnings 'misc';
342 BEGIN { binmode STDERR, 'utf8'; }
343 {
344     use utf8;
345     my $thìs;
346     my $thìs;
347 }
348 EXPECT
349 "my" variable $thìs masks earlier declaration in same scope at - line 6.
350 ########
351 # pad.c
352 use warnings 'closure' ;
353 BEGIN { binmode STDERR, 'utf8'; }
354 sub {
355     use utf8;
356     my $è;
357     sub f { $è }
358 }->();
359 EXPECT
360 Variable "$è" is not available at - line 7.
361 ########
362 # pad.c
363 use warnings 'closure' ;
364 BEGIN { binmode STDERR, 'utf8'; }
365 sub {
366     use utf8;
367     my $ニ;
368     sub f { $ニ }
369 }->();
370 EXPECT
371 Variable "$ニ" is not available at - line 7.
372 ########
373 # pad.c
374 use warnings 'closure' ;
375 BEGIN { binmode STDERR, 'utf8'; }
376 sub x {
377       use utf8;
378       my $に;
379       sub y {
380          $に
381       }
382    }
383 EXPECT
384 Variable "$に" will not stay shared at - line 9.
385 ########
386 # pad.c
387 use warnings 'closure' ;
388 BEGIN { binmode STDERR, 'utf8'; }
389 sub x {
390       use utf8;
391       my $に;
392       sub y {
393          sub { $に }
394       }
395    }
396 EXPECT
397 Variable "$に" will not stay shared at - line 8.
398 ########
399 # pad.c
400 use warnings 'closure' ;
401 BEGIN { binmode STDERR, 'utf8'; }
402 sub x {
403     use utf8;
404     my $に;
405     sub {
406         $に;
407         sub y {
408             $に
409         }
410     }->();
411 }
412 EXPECT
413 Variable "$に" will not stay shared at - line 11.
414 ########
415 # pad.c
416 use warnings 'closure' ;
417 BEGIN { binmode STDERR, 'utf8'; }
418 sub {
419     use utf8;
420     my $に;
421     sub f { $に }
422 }->();
423 EXPECT
424 Variable "$に" is not available at - line 7.
425 ########
426 # pad.c
427 use warnings 'closure' ;
428 BEGIN { binmode STDERR, 'utf8'; }
429 sub {
430     use utf8;
431     my $に;
432     sub f { eval '$に' }
433 }->();
434 f();
435 EXPECT
436 Variable "$に" is not available at (eval 1) line 2.
437 ########
438 # pad.c
439 # see bugid 1754
440 use warnings 'closure' ;
441 BEGIN { binmode STDERR, 'utf8'; }
442 sub f {
443     use utf8;
444     my $に;
445     sub { eval '$に' };
446 }
447 f()->();
448 EXPECT
449 Variable "$に" is not available at (eval 1) line 2.
450 ########
451 use warnings 'closure' ;
452 BEGIN { binmode STDERR, 'utf8'; }
453 {
454     use utf8;
455     my $に = 1;
456     $y = \$に; # force abandonment rather than clear-in-place at scope exit
457     sub f2 { eval '$に' }
458 }
459 f2();
460 EXPECT
461 Variable "$に" is not available at (eval 1) line 2.
462 ########
463 use warnings 'closure' ;
464 BEGIN { binmode STDERR, 'utf8'; }
465 use utf8;
466 for my $に (1,2,3) {
467     sub f { eval '$に' }
468     f();
469 }
470 f();
471 EXPECT
472 Variable "$に" is not available at (eval 4) line 2.
473 ########
474 # pad.c
475 use warnings 'closure' ;
476 BEGIN { binmode STDERR, 'utf8'; }
477 sub x {
478       use utf8;
479       my $è;
480       sub y {
481          $è
482       }
483    }
484 EXPECT
485 Variable "$è" will not stay shared at - line 9.
486 ########
487 # pad.c
488 use warnings 'closure' ;
489 BEGIN { binmode STDERR, 'utf8'; }
490 sub x {
491       use utf8;
492       my $è;
493       sub y {
494          sub { $è }
495       }
496    }
497 EXPECT
498 Variable "$è" will not stay shared at - line 8.
499 ########
500 # pad.c
501 use warnings 'closure' ;
502 BEGIN { binmode STDERR, 'utf8'; }
503 sub x {
504     use utf8;
505     my $è;
506     sub {
507         $è;
508         sub y {
509             $è
510         }
511     }->();
512 }
513 EXPECT
514 Variable "$è" will not stay shared at - line 11.
515 ########
516 # pad.c
517 use warnings 'closure' ;
518 BEGIN { binmode STDERR, 'utf8'; }
519 sub {
520     use utf8;
521     my $è;
522     sub f { $è }
523 }->();
524 EXPECT
525 Variable "$è" is not available at - line 7.
526 ########
527 # pad.c
528 use warnings 'closure' ;
529 BEGIN { binmode STDERR, 'utf8'; }
530 sub {
531     use utf8;
532     my $è;
533     sub f { eval '$è' }
534 }->();
535 f();
536 EXPECT
537 Variable "$è" is not available at (eval 1) line 2.
538 ########
539 # pad.c
540 # see bugid 1754
541 use warnings 'closure' ;
542 BEGIN { binmode STDERR, 'utf8'; }
543 sub f {
544     use utf8;
545     my $è;
546     sub { eval '$è' };
547 }
548 f()->();
549 EXPECT
550 Variable "$è" is not available at (eval 1) line 2.
551 ########
552 use warnings 'closure' ;
553 BEGIN { binmode STDERR, 'utf8'; }
554 {
555     use utf8;
556     my $è = 1;
557     $y = \$è; # force abandonment rather than clear-in-place at scope exit
558     sub f2 { eval '$è' }
559 }
560 f2();
561 EXPECT
562 Variable "$è" is not available at (eval 1) line 2.
563 ########
564 use warnings 'closure' ;
565 BEGIN { binmode STDERR, 'utf8'; }
566 use utf8;
567 for my $è (1,2,3) {
568     sub f { eval '$è' }
569     f();
570 }
571 f();
572 EXPECT
573 Variable "$è" is not available at (eval 4) line 2.
574 ########