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