xref: /openbsd-src/gnu/usr.bin/perl/t/lib/warnings/9uninit (revision b8851fcc53cbe24fd20b090f26dd149e353f6174)
1DAPM 4/2004.
2
3Test the appearance of variable names in "Use of uninitialized value"
4warnings.
5
6The following ops aren't tested, mainly because they do IO or non-portable
7stuff:
8
9    send recv bind conect listen accept shutdown chdir chown chroot unlink
10    chmod utime rename link symlink readlink mkdir rmdir opendir seekdir
11    system exec kill getpgrp alarm sleep dofile require gethostbyname
12    gethostbyaddr getnetbyname getnetbyaddr getprotobyname getprotobynumber
13    getservbyname getservbyport sethostent setnetent setprotoent setservent
14    getpwnam getpwuid getgrnam getgrgid waitpid setpgrp setpriority
15    getpriority syscall dbmopen ioctl fcntl truncate getsockopt setsockopt
16    semctl semop semget msgget msgctl msgsnd msgrcv shmget shmctl shmread
17    shmwrite
18
19    ---------------------------------------------------
20
21
22__END__
23use warnings 'uninitialized';
24my ($m1, $m2, $v);
25
26$v = $m1 + 10;
27$v = 22 + $m2;
28$v = $m1 + $m2;
29EXPECT
30Use of uninitialized value $m1 in addition (+) at - line 4.
31Use of uninitialized value $m2 in addition (+) at - line 5.
32Use of uninitialized value $m2 in addition (+) at - line 6.
33Use of uninitialized value $m1 in addition (+) at - line 6.
34########
35use warnings 'uninitialized';
36use utf8;
37use open qw( :utf8 :std );
38
39$v = $à1 + 10;
40$v = 22 + $a2;
41$v = $à1 + $a2;
42EXPECT
43Use of uninitialized value $à1 in addition (+) at - line 5.
44Use of uninitialized value $a2 in addition (+) at - line 6.
45Use of uninitialized value $a2 in addition (+) at - line 7.
46Use of uninitialized value $à1 in addition (+) at - line 7.
47########
48use warnings 'uninitialized';
49my ($m1, $v);
50our ($g1, $g2);
51
52$v = $g1 + 21;
53$v = 31 + $g2;
54$v = $g1 + $g2;
55$v = $m1 + $g2;
56EXPECT
57Use of uninitialized value $g1 in addition (+) at - line 5.
58Use of uninitialized value $g2 in addition (+) at - line 6.
59Use of uninitialized value $g2 in addition (+) at - line 7.
60Use of uninitialized value $g1 in addition (+) at - line 7.
61Use of uninitialized value $g2 in addition (+) at - line 8.
62Use of uninitialized value $m1 in addition (+) at - line 8.
63########
64use warnings 'uninitialized';
65my ($m1, @ma, $v);
66
67$v = $ma[5] + 45;
68$v = 56 + $ma[6];
69$v = $ma[7] + $m1;
70$v = $ma[8] + $ma[9];
71$v = $ma[-1] + $ma[-2];
72EXPECT
73Use of uninitialized value $ma[5] in addition (+) at - line 4.
74Use of uninitialized value $ma[6] in addition (+) at - line 5.
75Use of uninitialized value $m1 in addition (+) at - line 6.
76Use of uninitialized value in addition (+) at - line 6.
77Use of uninitialized value in addition (+) at - line 7.
78Use of uninitialized value in addition (+) at - line 7.
79Use of uninitialized value in addition (+) at - line 8.
80Use of uninitialized value in addition (+) at - line 8.
81########
82use warnings 'uninitialized';
83my ($v);
84my @mau = (undef) x 258;
85my %mhu = ('foo', undef, 'bar', undef);
86
87$v = $mau[5] + 23;
88$v = $mau[-5] + 45;
89$v = 56 + $mau[6];
90$v = 78 + $mau[-6];
91$v = $mau[7] + $mau[8];
92$v = $mau[256] + $mau[257];
93$v = $mau[-1] + $mau[-2];
94$v = $mhu{foo} + $mhu{bar};
95EXPECT
96Use of uninitialized value $mau[5] in addition (+) at - line 6.
97Use of uninitialized value $mau[-5] in addition (+) at - line 7.
98Use of uninitialized value $mau[6] in addition (+) at - line 8.
99Use of uninitialized value $mau[-6] in addition (+) at - line 9.
100Use of uninitialized value $mau[8] in addition (+) at - line 10.
101Use of uninitialized value $mau[7] in addition (+) at - line 10.
102Use of uninitialized value $mau[257] in addition (+) at - line 11.
103Use of uninitialized value $mau[256] in addition (+) at - line 11.
104Use of uninitialized value $mau[-2] in addition (+) at - line 12.
105Use of uninitialized value $mau[-1] in addition (+) at - line 12.
106Use of uninitialized value $mhu{"bar"} in addition (+) at - line 13.
107Use of uninitialized value $mhu{"foo"} in addition (+) at - line 13.
108########
109use warnings 'uninitialized';
110my ($v);
111our (@ga);
112
113$v = $ga[8] + 21;
114$v = $ga[-8] + 46;
115$v = 57 + $ga[9];
116$v = 58 + $ga[-9];
117$v = $ga[10] + $ga[11];
118$v = $ga[-10] + $ga[-11];
119EXPECT
120Use of uninitialized value $ga[8] in addition (+) at - line 5.
121Use of uninitialized value $ga[-8] in addition (+) at - line 6.
122Use of uninitialized value $ga[9] in addition (+) at - line 7.
123Use of uninitialized value $ga[-9] in addition (+) at - line 8.
124Use of uninitialized value in addition (+) at - line 9.
125Use of uninitialized value in addition (+) at - line 9.
126Use of uninitialized value in addition (+) at - line 10.
127Use of uninitialized value in addition (+) at - line 10.
128########
129use warnings 'uninitialized';
130my ($v);
131our @gau = (undef) x 258;
132our %ghu = ('foo', undef, 'bar', undef);
133
134$v = $gau[8] + 46;
135$v = $gau[-8] + 47;
136$v = 57 + $gau[9];
137$v = 57 + $gau[-9];
138$v = $gau[10] + $gau[11];
139$v = $gau[256] + $gau[257];
140$v = $gau[-1] + $gau[-2];
141$v = $ghu{foo} + $ghu{bar};
142EXPECT
143Use of uninitialized value $gau[8] in addition (+) at - line 6.
144Use of uninitialized value $gau[-8] in addition (+) at - line 7.
145Use of uninitialized value $gau[9] in addition (+) at - line 8.
146Use of uninitialized value $gau[-9] in addition (+) at - line 9.
147Use of uninitialized value $gau[11] in addition (+) at - line 10.
148Use of uninitialized value $gau[10] in addition (+) at - line 10.
149Use of uninitialized value $gau[257] in addition (+) at - line 11.
150Use of uninitialized value $gau[256] in addition (+) at - line 11.
151Use of uninitialized value $gau[-2] in addition (+) at - line 12.
152Use of uninitialized value $gau[-1] in addition (+) at - line 12.
153Use of uninitialized value $ghu{"bar"} in addition (+) at - line 13.
154Use of uninitialized value $ghu{"foo"} in addition (+) at - line 13.
155########
156use warnings 'uninitialized';
157my ($v);
158our @gau = (undef) x 258;
159our %ghu = ('foo', undef, 'bar', undef);
160my @mau = (undef) x 258;
161my %mhu = ('foo', undef, 'bar', undef);
162
163my $i1 = 10;
164my $i2 = 20;
165my $i3 = 2000;
166my $k1 = 'foo';
167my $k2 = 'bar';
168my $k3 = 'baz';
169$v = $mau[$i1] + $mau[$i2];
170$v = $gau[$i1] + $gau[$i2];
171$v = $gau[$i1] + $gau[$i3];
172$v = $mhu{$k1} + $mhu{$k2};
173$v = $ghu{$k1} + $ghu{$k2};
174$v = $ghu{$k1} + $ghu{$k3};
175EXPECT
176Use of uninitialized value $mau[20] in addition (+) at - line 14.
177Use of uninitialized value $mau[10] in addition (+) at - line 14.
178Use of uninitialized value $gau[20] in addition (+) at - line 15.
179Use of uninitialized value $gau[10] in addition (+) at - line 15.
180Use of uninitialized value in addition (+) at - line 16.
181Use of uninitialized value $gau[10] in addition (+) at - line 16.
182Use of uninitialized value $mhu{"bar"} in addition (+) at - line 17.
183Use of uninitialized value $mhu{"foo"} in addition (+) at - line 17.
184Use of uninitialized value $ghu{"bar"} in addition (+) at - line 18.
185Use of uninitialized value $ghu{"foo"} in addition (+) at - line 18.
186Use of uninitialized value in addition (+) at - line 19.
187Use of uninitialized value $ghu{"foo"} in addition (+) at - line 19.
188########
189use warnings 'uninitialized';
190my ($m1, $m2, @ma, %mh, $v);
191our ($g1, $g2, @ga, %gh);
192
193$v = $ma[$m1];
194$v = $ma[$g1];
195$v = $ga[$m2];
196$v = $ga[$g2];
197
198$v = $mh{$m1};
199$v = $mh{$g1};
200$v = $gh{$m2};
201$v = $gh{$g2};
202
203$v = $m1+($m2-$g1);
204$v = $ma[$ga[3]];
205$v = $ga[$ma[4]];
206EXPECT
207Use of uninitialized value $m1 in array element at - line 5.
208Use of uninitialized value $g1 in array element at - line 6.
209Use of uninitialized value $m2 in array element at - line 7.
210Use of uninitialized value $g2 in array element at - line 8.
211Use of uninitialized value $m1 in hash element at - line 10.
212Use of uninitialized value $g1 in hash element at - line 11.
213Use of uninitialized value $m2 in hash element at - line 12.
214Use of uninitialized value $g2 in hash element at - line 13.
215Use of uninitialized value $g1 in subtraction (-) at - line 15.
216Use of uninitialized value $m2 in subtraction (-) at - line 15.
217Use of uninitialized value $m1 in addition (+) at - line 15.
218Use of uninitialized value $ga[3] in array element at - line 16.
219Use of uninitialized value $ma[4] in array element at - line 17.
220########
221use warnings 'uninitialized';
222my (@ma, %mh, $v);
223our (@ga, %gh);
224
225$v = sin $ga[1000];
226$v = sin $ma[1000];
227$v = sin $gh{foo};
228$v = sin $mh{bar};
229
230$v = sin $ga[$$];
231$v = sin $ma[$$];
232$v = sin $gh{$$};
233$v = sin $mh{$$};
234EXPECT
235Use of uninitialized value $ga[1000] in sin at - line 5.
236Use of uninitialized value $ma[1000] in sin at - line 6.
237Use of uninitialized value $gh{"foo"} in sin at - line 7.
238Use of uninitialized value $mh{"bar"} in sin at - line 8.
239Use of uninitialized value within @ga in sin at - line 10.
240Use of uninitialized value within @ma in sin at - line 11.
241Use of uninitialized value within %gh in sin at - line 12.
242Use of uninitialized value within %mh in sin at - line 13.
243########
244use warnings 'uninitialized';
245my (@mat, %mht, $v);
246sub X::TIEARRAY { bless [], 'X' }
247sub X::TIEHASH { bless [], 'X' }
248sub X::FETCH { undef }
249tie @mat, 'X';
250tie %mht, 'X';
251my $key1 = 'akey';
252my $key2 = 'bkey';
253my $index1 = 33;
254my $index2 = 55;
255
256$v = sin $mat[0];
257$v = $mat[0] + $mat[1];
258$v = sin $mat[1000];
259$v = $mat[1000] + $mat[1001];
260
261$v = sin $mat[$index1];
262$v = $mat[$index1] + $mat[$index2];
263
264$v = sin $mht{foo};
265$v = $mht{foo} + $mht{bar};
266
267$v = sin $mht{$key1};
268$v = $mht{$key1} + $mht{$key2};
269
270$v = $1+1;
271EXPECT
272Use of uninitialized value $mat[0] in sin at - line 13.
273Use of uninitialized value in addition (+) at - line 14.
274Use of uninitialized value in addition (+) at - line 14.
275Use of uninitialized value $mat[1000] in sin at - line 15.
276Use of uninitialized value in addition (+) at - line 16.
277Use of uninitialized value in addition (+) at - line 16.
278Use of uninitialized value within @mat in sin at - line 18.
279Use of uninitialized value in addition (+) at - line 19.
280Use of uninitialized value in addition (+) at - line 19.
281Use of uninitialized value $mht{"foo"} in sin at - line 21.
282Use of uninitialized value in addition (+) at - line 22.
283Use of uninitialized value in addition (+) at - line 22.
284Use of uninitialized value within %mht in sin at - line 24.
285Use of uninitialized value in addition (+) at - line 25.
286Use of uninitialized value in addition (+) at - line 25.
287Use of uninitialized value $1 in addition (+) at - line 27.
288########
289use warnings 'uninitialized';
290my ($m1);
291our ($g1, @ga);
292
293print $ga[1000];
294print STDERR $ga[1000];
295print STDERR $m1, $g1, $ga[1],$m2;
296print STDERR "", $ga[1],"";
297EXPECT
298Use of uninitialized value in print at - line 5.
299Use of uninitialized value in print at - line 6.
300Use of uninitialized value $m1 in print at - line 7.
301Use of uninitialized value $g1 in print at - line 7.
302Use of uninitialized value in print at - line 7.
303Use of uninitialized value $m2 in print at - line 7.
304Use of uninitialized value in print at - line 8.
305########
306use warnings 'uninitialized';
307my ($m1);
308our ($g1);
309
310close $m1;	# exercises rv2gv
311close $g1;	# exercises rv2gv
312close undef;	# exercises rv2gv
313EXPECT
314Use of uninitialized value $m1 in ref-to-glob cast at - line 5.
315Use of uninitialized value $g1 in ref-to-glob cast at - line 6.
316Use of uninitialized value in ref-to-glob cast at - line 7.
317########
318use warnings 'uninitialized';
319my ($m1, $m2, $v);
320our ($g1, $g2);
321
322$v = $$m1;
323$v = $$g1;
324
325$v = @$m1;
326$v = @$g1;
327$v = %$m2;
328$v = %$g2;
329
330$v = ${"foo.bar"}+1;
331$v = ${"foo$m1"}+1;
332$v = ${"foo$g1"}+1;
333EXPECT
334Use of uninitialized value $m1 in scalar dereference at - line 5.
335Use of uninitialized value $g1 in scalar dereference at - line 6.
336Use of uninitialized value $m1 in array dereference at - line 8.
337Use of uninitialized value $g1 in array dereference at - line 9.
338Use of uninitialized value $m2 in hash dereference at - line 10.
339Use of uninitialized value $g2 in hash dereference at - line 11.
340Use of uninitialized value in addition (+) at - line 13.
341Use of uninitialized value $m1 in concatenation (.) or string at - line 14.
342Use of uninitialized value in addition (+) at - line 14.
343Use of uninitialized value $g1 in concatenation (.) or string at - line 15.
344Use of uninitialized value in addition (+) at - line 15.
345########
346use warnings 'uninitialized';
347my ($m1, $v);
348our ($g1);
349
350$v = $m1 | $m2;
351$v = $m1 & $m2;
352$v = $m1 ^ $m2;
353$v = ~$m1;
354
355$v = $g1 | $g2;
356$v = $g1 & $g2;
357$v = $g1 ^ $g2;
358$v = ~$g1;
359EXPECT
360Use of uninitialized value $m1 in bitwise or (|) at - line 5.
361Use of uninitialized value $m2 in bitwise or (|) at - line 5.
362Use of uninitialized value $m1 in bitwise and (&) at - line 6.
363Use of uninitialized value $m2 in bitwise and (&) at - line 6.
364Use of uninitialized value $m1 in bitwise xor (^) at - line 7.
365Use of uninitialized value $m2 in bitwise xor (^) at - line 7.
366Use of uninitialized value $m1 in 1's complement (~) at - line 8.
367Use of uninitialized value $g1 in bitwise or (|) at - line 10.
368Use of uninitialized value $g2 in bitwise or (|) at - line 10.
369Use of uninitialized value $g1 in bitwise and (&) at - line 11.
370Use of uninitialized value $g2 in bitwise and (&) at - line 11.
371Use of uninitialized value $g1 in bitwise xor (^) at - line 12.
372Use of uninitialized value $g2 in bitwise xor (^) at - line 12.
373Use of uninitialized value $g1 in 1's complement (~) at - line 13.
374########
375use warnings 'uninitialized';
376my ($v);
377
378my  $tmp1; $v = $tmp1++; # (doesn't warn)
379our $tmp2; $v = $tmp2++; # (doesn't warn)
380my  $tmp3; $v = ++$tmp1; # (doesn't warn)
381our $tmp4; $v = ++$tmp2; # (doesn't warn)
382
383my  $tmp5; $v = $tmp5--; # (doesn't warn)
384our $tmp6; $v = $tmp6--; # (doesn't warn)
385my  $tmp7; $v = --$tmp7; # (doesn't warn)
386our $tmp8; $v = --$tmp8; # (doesn't warn)
387EXPECT
388########
389use warnings 'uninitialized';
390
391my $s1; chomp $s1;
392my $s2; chop  $s2;
393my ($s3,$s4); chomp ($s3,$s4);
394my ($s5,$s6); chop  ($s5,$s6);
395EXPECT
396Use of uninitialized value $s1 in scalar chomp at - line 3.
397Use of uninitialized value $s2 in scalar chop at - line 4.
398Use of uninitialized value $s3 in chomp at - line 5.
399Use of uninitialized value $s4 in chomp at - line 5.
400Use of uninitialized value $s5 in chop at - line 6.
401Use of uninitialized value $s6 in chop at - line 6.
402########
403use warnings 'uninitialized';
404my ($m1);
405
406local $/ =\$m1;
407my $x = "abc";
408chomp $x; chop $x;
409my $y;
410chomp ($x, $y); chop ($x, $y);
411EXPECT
412Use of uninitialized value $m1 in scalar assignment at - line 4.
413Use of uninitialized value $m1 in scalar assignment at - line 4.
414Setting $/ to a reference to zero as a form of slurp is deprecated, treating as undef at - line 4.
415Use of uninitialized value $y in chop at - line 8.
416########
417use warnings 'uninitialized';
418my ($m1, @ma, %mh);
419our ($g1);
420
421delete $ma[$m1];
422delete @ma[$m1, $g1];
423delete $mh{$m1};
424delete @mh{$m1, $g1};
425EXPECT
426Use of uninitialized value $m1 in delete at - line 5.
427Use of uninitialized value $m1 in delete at - line 6.
428Use of uninitialized value $g1 in delete at - line 6.
429Use of uninitialized value $m1 in delete at - line 7.
430Use of uninitialized value $m1 in delete at - line 8.
431Use of uninitialized value $g1 in delete at - line 8.
432########
433use warnings 'uninitialized';
434my ($m1, @ma, %mh);
435our ($g1);
436
437my @a = @ma[$m1, $g1];
438@a = (4,5)[$m1, $g1];
439@a = @mh{$m1, $g1};
440EXPECT
441Use of uninitialized value $m1 in array slice at - line 5.
442Use of uninitialized value $g1 in array slice at - line 5.
443Use of uninitialized value $m1 in list slice at - line 6.
444Use of uninitialized value $g1 in list slice at - line 6.
445Use of uninitialized value $m1 in hash slice at - line 7.
446Use of uninitialized value $g1 in hash slice at - line 7.
447########
448use warnings 'uninitialized';
449my ($m1, @ma, %mh, $v);
450our ($g1, @ga, %gh);
451
452$v = exists $ma[$m1];
453$v = exists $ga[$g1];
454$v = exists $mh{$m1};
455$v = exists $gh{$g1};
456EXPECT
457Use of uninitialized value $m1 in exists at - line 5.
458Use of uninitialized value $g1 in exists at - line 6.
459Use of uninitialized value $m1 in exists at - line 7.
460Use of uninitialized value $g1 in exists at - line 8.
461########
462use warnings 'uninitialized';
463my ($m1, $m2);
464my ($v, @a);
465my ($t, $u) = (1, 1);
466
467local $.;
468
469@ma = (1   .. 2);
470@ma = ($t  .. 2);
471@ma = ($m1 .. 2);
472@ma = (1   .. $u);
473@ma = (1   .. $m2);
474
475@ma = (1   ... 2);
476@ma = ($t  ... 2);
477@ma = ($m1 ... 2);
478@ma = (1   ... $u);
479@ma = (1   ... $m2);
480
481$v = (1   .. 2);
482$v = ($t  .. 2);
483$v = ($m1 .. 2);
484$v = (1   .. $u);
485$v = (1   .. $m2);
486
487$v = (1   ... 2);
488$v = ($t  ... 2);
489$v = ($m1 ... 2);
490$v = (1   ... $u);
491$v = (1   ... $m2);
492EXPECT
493Use of uninitialized value $m1 in range (or flop) at - line 10.
494Use of uninitialized value $m2 in range (or flop) at - line 12.
495Use of uninitialized value $m1 in range (or flop) at - line 16.
496Use of uninitialized value $m2 in range (or flop) at - line 18.
497Use of uninitialized value $. in range (or flip) at - line 20.
498Use of uninitialized value $. in range (or flop) at - line 21.
499Use of uninitialized value $. in range (or flip) at - line 23.
500Use of uninitialized value $. in range (or flip) at - line 24.
501Use of uninitialized value $. in range (or flip) at - line 26.
502Use of uninitialized value $. in range (or flip) at - line 29.
503Use of uninitialized value $. in range (or flip) at - line 30.
504########
505use warnings 'uninitialized';
506my ($m1, $m2);
507my ($v, @a);
508my ($t, $u) = (1, 1);
509
510@ma = ($t  .. $u);
511@ma = ($m1 .. $u);
512@ma = ($t  .. $m2);
513@ma = ($m1 .. $m2);
514
515@ma = ($t  ... $u);
516@ma = ($m1 ... $u);
517@ma = ($t  ... $m2);
518@ma = ($m1 ... $m2);
519
520$v = ($t  .. $u);
521$v = ($m1 .. $u);
522$v = ($t  .. $m2);
523$v = ($m1 .. $m2);
524
525$v = ($t  ... $u);
526$v = ($m1 ... $u);
527$v = ($t  ... $m2);
528$v = ($m1 ... $m2);
529EXPECT
530Use of uninitialized value $m1 in range (or flop) at - line 7.
531Use of uninitialized value $m2 in range (or flop) at - line 8.
532Use of uninitialized value $m1 in range (or flop) at - line 9.
533Use of uninitialized value $m2 in range (or flop) at - line 9.
534Use of uninitialized value $m1 in range (or flop) at - line 12.
535Use of uninitialized value $m2 in range (or flop) at - line 13.
536Use of uninitialized value $m1 in range (or flop) at - line 14.
537Use of uninitialized value $m2 in range (or flop) at - line 14.
538########
539use warnings 'uninitialized';
540my ($m1, $v);
541our ($g1);
542
543my ($x1,$x2);
544$v = $x1 << $m1;
545$v = $x2 << $g1;
546EXPECT
547Use of uninitialized value $m1 in left bitshift (<<) at - line 6.
548Use of uninitialized value $x1 in left bitshift (<<) at - line 6.
549Use of uninitialized value $g1 in left bitshift (<<) at - line 7.
550Use of uninitialized value $x2 in left bitshift (<<) at - line 7.
551########
552use warnings 'uninitialized';
553my ($m1, $m2, $v);
554our ($g1, $g2);
555
556use integer;
557$v = $m1 + $g1;
558$v = $m1 - $g1;
559$v = $m1 * $g1;
560eval {$v = $m1 / $g1};
561$v = $m2 / 2;
562eval {$v = $m1 % $g1};
563$v = $m2 % 2;
564$v = $m1 < $g1;
565$v = $m1 > $g1;
566$v = $m1 <= $g1;
567$v = $m1 >= $g1;
568$v = $m1 == $g1;
569$v = $m1 != $g1;
570$v = $m1 <=> $g1;
571$v = -$m1;
572EXPECT
573Use of uninitialized value $g1 in integer addition (+) at - line 6.
574Use of uninitialized value $m1 in integer addition (+) at - line 6.
575Use of uninitialized value $g1 in integer subtraction (-) at - line 7.
576Use of uninitialized value $m1 in integer subtraction (-) at - line 7.
577Use of uninitialized value $g1 in integer multiplication (*) at - line 8.
578Use of uninitialized value $m1 in integer multiplication (*) at - line 8.
579Use of uninitialized value $g1 in integer division (/) at - line 9.
580Use of uninitialized value $m2 in integer division (/) at - line 10.
581Use of uninitialized value $g1 in integer modulus (%) at - line 11.
582Use of uninitialized value $m1 in integer modulus (%) at - line 11.
583Use of uninitialized value $m2 in integer modulus (%) at - line 12.
584Use of uninitialized value $g1 in integer lt (<) at - line 13.
585Use of uninitialized value $m1 in integer lt (<) at - line 13.
586Use of uninitialized value $g1 in integer gt (>) at - line 14.
587Use of uninitialized value $m1 in integer gt (>) at - line 14.
588Use of uninitialized value $g1 in integer le (<=) at - line 15.
589Use of uninitialized value $m1 in integer le (<=) at - line 15.
590Use of uninitialized value $g1 in integer ge (>=) at - line 16.
591Use of uninitialized value $m1 in integer ge (>=) at - line 16.
592Use of uninitialized value $g1 in integer eq (==) at - line 17.
593Use of uninitialized value $m1 in integer eq (==) at - line 17.
594Use of uninitialized value $g1 in integer ne (!=) at - line 18.
595Use of uninitialized value $m1 in integer ne (!=) at - line 18.
596Use of uninitialized value $g1 in integer comparison (<=>) at - line 19.
597Use of uninitialized value $m1 in integer comparison (<=>) at - line 19.
598Use of uninitialized value $m1 in integer negation (-) at - line 20.
599########
600use warnings 'uninitialized';
601my ($m1, $m2, $v);
602our ($g1, $g2);
603
604$v = int($g1);
605$v = abs($g2);
606EXPECT
607Use of uninitialized value $g1 in int at - line 5.
608Use of uninitialized value $g2 in abs at - line 6.
609########
610use warnings 'uninitialized';
611my ($m1, $m2, $v);
612our ($g1);
613
614$v = pack $m1;
615$v = pack "i*", $m2, $g1, $g2;
616my @unpack = unpack $m1, $m2;
617EXPECT
618Use of uninitialized value $m1 in pack at - line 5.
619Use of uninitialized value $m2 in pack at - line 6.
620Use of uninitialized value $g1 in pack at - line 6.
621Use of uninitialized value $g2 in pack at - line 6.
622Use of uninitialized value $m1 in unpack at - line 7.
623Use of uninitialized value $m2 in unpack at - line 7.
624########
625use warnings 'uninitialized';
626my ($m1);
627our ($g1);
628
629my @sort;
630@sort = sort $m1, $g1;
631@sort = sort {$a <=> $b} $m1, $g1;
632sub sortf {$a-1 <=> $b-1};
633@sort = sort  &sortf, $m1, $g1;
634@sort = sort { undef } 1, 2;
635sub frobnicate($$) { undef }
636@sort = sort frobnicate 1, 2;
637@sort = sort pyfg 1, 2;
638@sort = sort pyfgc 1, 2;
639no warnings;
640sub pyfg { undef }
641sub pyfgc($$) { undef }
642use warnings;
643sub dog {}
644sub dogwood($$) {}
645@sort = sort dog     1,2;
646@sort = sort dogwood 1,2;
647EXPECT
648Use of uninitialized value $m1 in sort at - line 6.
649Use of uninitialized value $g1 in sort at - line 6.
650Use of uninitialized value $m1 in sort at - line 6.
651Use of uninitialized value $g1 in sort at - line 6.
652Use of uninitialized value $m1 in sort at - line 7.
653Use of uninitialized value $g1 in sort at - line 7.
654Use of uninitialized value $m1 in sort at - line 7.
655Use of uninitialized value $g1 in sort at - line 7.
656Use of uninitialized value $a in subtraction (-) at - line 8.
657Use of uninitialized value $b in subtraction (-) at - line 8.
658Use of uninitialized value $m1 in sort at - line 9.
659Use of uninitialized value $g1 in sort at - line 9.
660Use of uninitialized value $m1 in sort at - line 9.
661Use of uninitialized value $m1 in sort at - line 9.
662Use of uninitialized value $g1 in sort at - line 9.
663Use of uninitialized value $g1 in sort at - line 9.
664Use of uninitialized value in sort at - line 10.
665Use of uninitialized value in sort at - line 12.
666Use of uninitialized value in sort at - line 13.
667Use of uninitialized value in sort at - line 14.
668Use of uninitialized value in sort at - line 21.
669Use of uninitialized value in sort at - line 22.
670########
671my $nan = sin 9**9**9;
672if ($nan == $nan) {
673    print <<EOM ;
674SKIPPED
675# No nan support
676EOM
677    exit ;
678}
679use warnings 'uninitialized';
680# The optimised {$a<=>$b} case should behave the same way as unoptimised.
681@sort = sort { ($a)[0] <=> $b } 1, $nan;
682@sort = sort {  $a     <=> $b } 1, $nan;
683EXPECT
684Use of uninitialized value in sort at - line 11.
685Use of uninitialized value in sort at - line 12.
686########
687use warnings 'uninitialized';
688my ($m1, $m2, $v);
689our ($g1);
690
691eval { $v = $m1 / $g1 };
692$v = $m2 / 2;
693eval { $v = $m1 % $g1 };
694$v = $m2 % 2;
695$v = $m1 == $g1;
696$v = $m1 >= $g1;
697$v = $m1 >  $g1;
698$v = $m1 <= $g1;
699$v = $m1 <  $g1;
700$v = $m1 *  $g1;
701$v = $m1 <=>$g1;
702$v = $m1 != $g1;
703$v = $m1   -$g1;
704$v = $m1 ** $g1;
705$v = $m1 +  $g1;
706$v = $m1 -  $g1;
707EXPECT
708Use of uninitialized value $g1 in division (/) at - line 5.
709Use of uninitialized value $m1 in division (/) at - line 5.
710Use of uninitialized value $m2 in division (/) at - line 6.
711Use of uninitialized value $g1 in modulus (%) at - line 7.
712Use of uninitialized value $m1 in modulus (%) at - line 7.
713Use of uninitialized value $m2 in modulus (%) at - line 8.
714Use of uninitialized value $g1 in numeric eq (==) at - line 9.
715Use of uninitialized value $m1 in numeric eq (==) at - line 9.
716Use of uninitialized value $g1 in numeric ge (>=) at - line 10.
717Use of uninitialized value $m1 in numeric ge (>=) at - line 10.
718Use of uninitialized value $g1 in numeric gt (>) at - line 11.
719Use of uninitialized value $m1 in numeric gt (>) at - line 11.
720Use of uninitialized value $g1 in numeric le (<=) at - line 12.
721Use of uninitialized value $m1 in numeric le (<=) at - line 12.
722Use of uninitialized value $g1 in numeric lt (<) at - line 13.
723Use of uninitialized value $m1 in numeric lt (<) at - line 13.
724Use of uninitialized value $g1 in multiplication (*) at - line 14.
725Use of uninitialized value $m1 in multiplication (*) at - line 14.
726Use of uninitialized value $g1 in numeric comparison (<=>) at - line 15.
727Use of uninitialized value $m1 in numeric comparison (<=>) at - line 15.
728Use of uninitialized value $g1 in numeric ne (!=) at - line 16.
729Use of uninitialized value $m1 in numeric ne (!=) at - line 16.
730Use of uninitialized value $g1 in subtraction (-) at - line 17.
731Use of uninitialized value $m1 in subtraction (-) at - line 17.
732Use of uninitialized value $g1 in exponentiation (**) at - line 18.
733Use of uninitialized value $m1 in exponentiation (**) at - line 18.
734Use of uninitialized value $g1 in addition (+) at - line 19.
735Use of uninitialized value $m1 in addition (+) at - line 19.
736Use of uninitialized value $g1 in subtraction (-) at - line 20.
737Use of uninitialized value $m1 in subtraction (-) at - line 20.
738########
739use warnings 'uninitialized';
740sub TIESCALAR{bless[]}
741sub FETCH { undef }
742
743tie my $m1, "";
744my $v;
745$v = $m1 + $m1;
746$v = $m1 - $m1;
747no warnings;
748$v = $m1 + $m1;
749$v = $m1 - $m1;
750EXPECT
751Use of uninitialized value $m1 in addition (+) at - line 7.
752Use of uninitialized value $m1 in addition (+) at - line 7.
753Use of uninitialized value $m1 in subtraction (-) at - line 8.
754Use of uninitialized value $m1 in subtraction (-) at - line 8.
755########
756use warnings 'uninitialized';
757my ($m1, $v);
758our ($g1);
759
760$v = *global1{$m1};
761$v = prototype $g1;
762$v = bless [], $g1;
763$v = `$m1`;
764
765$v = $m1 . $g1;
766EXPECT
767Use of uninitialized value $m1 in glob elem at - line 5.
768Use of uninitialized value $g1 in subroutine prototype at - line 6.
769Use of uninitialized value $g1 in bless at - line 7.
770Use of uninitialized value $m1 in quoted execution (``, qx) at - line 8.
771Use of uninitialized value $m1 in concatenation (.) or string at - line 10.
772Use of uninitialized value $g1 in concatenation (.) or string at - line 10.
773########
774use warnings 'uninitialized';
775my ($m1);
776our ($g1, $g2);
777
778/y/;
779/$m1/;
780/$g1/;
781
782s/y/z/;		undef $_;
783s/$m1/z/;	undef $_;
784s//$g1/;	undef $_;
785s/$m1/$g1/;	undef $_;
786tr/x/y/;	undef $_;
787tr/x/y/r;	undef $_;
788
789$g2 =~ /y/;
790$g2 =~ /$m1/;
791$g2 =~ /$g1/;
792$g2 =~ s/y/z/;		undef $g2;
793$g2 =~ s/$m1/z/;	undef $g2;
794$g2 =~ s//$g1/;		undef $g2;
795$g2 =~ s/$m1/$g1/;	undef $g2;
796$g2 =~ tr/x/y/;		undef $g2; # XXX can't extract var name yet
797$g2 =~ tr/x/y/r;	undef $g2; # XXX can't extract var name yet
798
799my $foo = "abc";
800$foo =~ /$m1/;
801$foo =~ /$g1/;
802$foo =~ s/y/z/;
803$foo =~ s/$m1/z/;
804$foo =~ s//$g1/;
805$foo =~ s/$m1/$g1/;
806$foo =~ s/./$m1/e;
807undef $g1;
808$m1 = '$g1';
809$foo =~ s//$m1/ee;
810undef $m1;
811$m1 =~ tr/x/y/;		undef $m1;
812$m1 =~ tr/x/y/r;
813EXPECT
814Use of uninitialized value $_ in pattern match (m//) at - line 5.
815Use of uninitialized value $m1 in regexp compilation at - line 6.
816Use of uninitialized value $_ in pattern match (m//) at - line 6.
817Use of uninitialized value $g1 in regexp compilation at - line 7.
818Use of uninitialized value $_ in pattern match (m//) at - line 7.
819Use of uninitialized value $_ in substitution (s///) at - line 9.
820Use of uninitialized value $m1 in regexp compilation at - line 10.
821Use of uninitialized value $_ in substitution (s///) at - line 10.
822Use of uninitialized value $_ in substitution (s///) at - line 10.
823Use of uninitialized value $_ in substitution (s///) at - line 11.
824Use of uninitialized value $_ in substitution (s///) at - line 11.
825Use of uninitialized value $g1 in substitution iterator at - line 11.
826Use of uninitialized value $m1 in regexp compilation at - line 12.
827Use of uninitialized value $_ in substitution (s///) at - line 12.
828Use of uninitialized value $_ in substitution (s///) at - line 12.
829Use of uninitialized value $g1 in substitution iterator at - line 12.
830Use of uninitialized value $_ in transliteration (tr///) at - line 13.
831Use of uninitialized value $_ in transliteration (tr///) at - line 14.
832Use of uninitialized value $g2 in pattern match (m//) at - line 16.
833Use of uninitialized value $m1 in regexp compilation at - line 17.
834Use of uninitialized value $g2 in pattern match (m//) at - line 17.
835Use of uninitialized value $g1 in regexp compilation at - line 18.
836Use of uninitialized value $g2 in pattern match (m//) at - line 18.
837Use of uninitialized value $g2 in substitution (s///) at - line 19.
838Use of uninitialized value $m1 in regexp compilation at - line 20.
839Use of uninitialized value $g2 in substitution (s///) at - line 20.
840Use of uninitialized value $g2 in substitution (s///) at - line 20.
841Use of uninitialized value $g2 in substitution (s///) at - line 21.
842Use of uninitialized value $g2 in substitution (s///) at - line 21.
843Use of uninitialized value $g1 in substitution iterator at - line 21.
844Use of uninitialized value $m1 in regexp compilation at - line 22.
845Use of uninitialized value $g2 in substitution (s///) at - line 22.
846Use of uninitialized value $g2 in substitution (s///) at - line 22.
847Use of uninitialized value $g1 in substitution iterator at - line 22.
848Use of uninitialized value in transliteration (tr///) at - line 23.
849Use of uninitialized value in transliteration (tr///) at - line 24.
850Use of uninitialized value $m1 in regexp compilation at - line 27.
851Use of uninitialized value $g1 in regexp compilation at - line 28.
852Use of uninitialized value $m1 in regexp compilation at - line 30.
853Use of uninitialized value $g1 in substitution iterator at - line 31.
854Use of uninitialized value $m1 in regexp compilation at - line 32.
855Use of uninitialized value $g1 in substitution iterator at - line 32.
856Use of uninitialized value $m1 in substitution (s///) at - line 33.
857Use of uninitialized value in substitution iterator at - line 36.
858Use of uninitialized value $m1 in transliteration (tr///) at - line 38.
859Use of uninitialized value $m1 in transliteration (tr///) at - line 39.
860########
861use warnings 'uninitialized';
862my ($m1);
863
864{ my $foo = "abc"; (substr($foo,0,0)) = ($m1) }
865EXPECT
866Use of uninitialized value $m1 in list assignment at - line 4.
867########
868use warnings 'uninitialized';
869our ($g1);
870
871study;
872study $g1;
873EXPECT
874Use of uninitialized value $_ in study at - line 4.
875Use of uninitialized value $g1 in study at - line 5.
876########
877use warnings 'uninitialized';
878my ($m1);
879
880pos()=0;
881pos($m1)=0;
882EXPECT
883Use of uninitialized value $_ in scalar assignment at - line 4.
884Use of uninitialized value $m1 in scalar assignment at - line 5.
885########
886use warnings 'uninitialized';
887my ($m1);
888our ($g1);
889
890$v = pos($m1) + 1;
891$v = pos($g1) + 1;
892$m1 = 0;
893$g1 = "";
894$v = pos($m1) + 1;
895$v = pos($g1) + 1;
896EXPECT
897Use of uninitialized value in addition (+) at - line 5.
898Use of uninitialized value in addition (+) at - line 6.
899Use of uninitialized value in addition (+) at - line 9.
900Use of uninitialized value in addition (+) at - line 10.
901########
902use warnings 'uninitialized';
903my ($m1);
904
905{ my $x = "a" x $m1 }		# NB LHS of repeat does not warn
906{ my @x = ("a") x $m1 }
907EXPECT
908Use of uninitialized value $m1 in repeat (x) at - line 4.
909Use of uninitialized value $m1 in repeat (x) at - line 5.
910########
911use warnings 'uninitialized';
912my ($m1, $v);
913our ($g1);
914
915$v = "$m1";
916
917$v = $m1 lt $g1;
918$v = $m1 le $g1;
919$v = $m1 gt $g1;
920$v = $m1 ge $g1;
921$v = $m1 eq $g1;
922$v = $m1 ne $g1;
923$v = $m1 cmp $g1;
924EXPECT
925Use of uninitialized value $m1 in string at - line 5.
926Use of uninitialized value $m1 in string lt at - line 7.
927Use of uninitialized value $g1 in string lt at - line 7.
928Use of uninitialized value $m1 in string le at - line 8.
929Use of uninitialized value $g1 in string le at - line 8.
930Use of uninitialized value $m1 in string gt at - line 9.
931Use of uninitialized value $g1 in string gt at - line 9.
932Use of uninitialized value $m1 in string ge at - line 10.
933Use of uninitialized value $g1 in string ge at - line 10.
934Use of uninitialized value $m1 in string eq at - line 11.
935Use of uninitialized value $g1 in string eq at - line 11.
936Use of uninitialized value $m1 in string ne at - line 12.
937Use of uninitialized value $g1 in string ne at - line 12.
938Use of uninitialized value $m1 in string comparison (cmp) at - line 13.
939Use of uninitialized value $g1 in string comparison (cmp) at - line 13.
940########
941use warnings 'uninitialized';
942my ($m1, $v);
943our ($g1);
944
945$v = atan2($m1,$g1);
946$v = sin $m1;
947$v = cos $m1;
948$v = rand $m1;
949$v = srand $m1;
950$v = exp $m1;
951$v = eval {log $m1};
952$v = sqrt $m1;
953$v = hex $m1;
954$v = oct $m1;
955$v = oct;
956$v = length; # does not warn
957EXPECT
958Use of uninitialized value $g1 in atan2 at - line 5.
959Use of uninitialized value $m1 in atan2 at - line 5.
960Use of uninitialized value $m1 in sin at - line 6.
961Use of uninitialized value $m1 in cos at - line 7.
962Use of uninitialized value $m1 in rand at - line 8.
963Use of uninitialized value $m1 in srand at - line 9.
964Use of uninitialized value $m1 in exp at - line 10.
965Use of uninitialized value $m1 in log at - line 11.
966Use of uninitialized value $m1 in sqrt at - line 12.
967Use of uninitialized value $m1 in hex at - line 13.
968Use of uninitialized value $m1 in oct at - line 14.
969Use of uninitialized value $_ in oct at - line 15.
970########
971use warnings 'uninitialized';
972my ($m1, $v);
973our ($g1);
974
975$v = substr $m1, $g1;
976$v = substr $m1, $g1, $m2;
977$v = substr $m1, $g1, $m2, $g2;	undef $m1;
978substr($m1, $g1) = $g2;		undef $m1; # NB global2
979substr($m1, $g1, $m2) = $g2;	undef $m1; # isn't identified
980
981$v = eval {vec ($m1, $g1, $m2)};
982eval {vec ($m1, $g1, $m2) = $g2};	undef $m1; # ditto
983
984$v = index  $m1, $m2;
985$v = index  $m1, $m2, $g1;
986$v = rindex $m1, $m2;
987$v = rindex $m1, $m2, $g1;
988EXPECT
989Use of uninitialized value $g1 in substr at - line 5.
990Use of uninitialized value $m1 in substr at - line 5.
991Use of uninitialized value $m2 in substr at - line 6.
992Use of uninitialized value $g1 in substr at - line 6.
993Use of uninitialized value $m1 in substr at - line 6.
994Use of uninitialized value $m2 in substr at - line 7.
995Use of uninitialized value $g1 in substr at - line 7.
996Use of uninitialized value $g2 in substr at - line 7.
997Use of uninitialized value $m1 in substr at - line 7.
998Use of uninitialized value $g1 in substr at - line 8.
999Use of uninitialized value $g2 in substr at - line 8.
1000Use of uninitialized value $m1 in substr at - line 8.
1001Use of uninitialized value $m2 in substr at - line 9.
1002Use of uninitialized value $g1 in substr at - line 9.
1003Use of uninitialized value $g2 in substr at - line 9.
1004Use of uninitialized value $m1 in substr at - line 9.
1005Use of uninitialized value $m2 in vec at - line 11.
1006Use of uninitialized value $g1 in vec at - line 11.
1007Use of uninitialized value $m1 in vec at - line 11.
1008Use of uninitialized value $m2 in vec at - line 12.
1009Use of uninitialized value $g1 in vec at - line 12.
1010Use of uninitialized value $m1 in index at - line 14.
1011Use of uninitialized value $m2 in index at - line 14.
1012Use of uninitialized value $g1 in index at - line 15.
1013Use of uninitialized value $m1 in index at - line 15.
1014Use of uninitialized value $m2 in index at - line 15.
1015Use of uninitialized value $m1 in rindex at - line 16.
1016Use of uninitialized value $m2 in rindex at - line 16.
1017Use of uninitialized value $g1 in rindex at - line 17.
1018Use of uninitialized value $m1 in rindex at - line 17.
1019Use of uninitialized value $m2 in rindex at - line 17.
1020########
1021use warnings 'uninitialized';
1022my ($m1, $v);
1023our ($g1);
1024
1025$v = sprintf $m1;
1026$v = sprintf '%d%d%d%d', $m1, $m2, $g1, $g2;
1027my $m3; eval {formline $m3 };
1028formline '@<<@<<@<<@<<', $m1, $m2, $g1, $g2;
1029EXPECT
1030Use of uninitialized value $m1 in sprintf at - line 5.
1031Use of uninitialized value $m1 in sprintf at - line 6.
1032Use of uninitialized value $m2 in sprintf at - line 6.
1033Use of uninitialized value $g1 in sprintf at - line 6.
1034Use of uninitialized value $g2 in sprintf at - line 6.
1035Use of uninitialized value $m3 in formline at - line 7.
1036Use of uninitialized value $m1 in formline at - line 8.
1037Use of uninitialized value $m2 in formline at - line 8.
1038Use of uninitialized value $g1 in formline at - line 8.
1039Use of uninitialized value $g2 in formline at - line 8.
1040########
1041# SKIP ? !$Config{d_crypt}
1042use warnings 'uninitialized';
1043my ($m1, $v);
1044our ($g1);
1045
1046$v = crypt $m1, $g1;
1047
1048$v = ord;
1049$v = ord $m1;
1050$v = chr;
1051$v = chr $m1;
1052
1053$v = ucfirst;
1054$v = ucfirst $m1;
1055$v = lcfirst;
1056$v = lcfirst $m1;
1057$v = uc;
1058$v = uc $m1;
1059$v = lc;
1060$v = lc $m1;
1061
1062$v = quotemeta;
1063$v = quotemeta $m1;
1064EXPECT
1065Use of uninitialized value $m1 in crypt at - line 5.
1066Use of uninitialized value $g1 in crypt at - line 5.
1067Use of uninitialized value $_ in ord at - line 7.
1068Use of uninitialized value $m1 in ord at - line 8.
1069Use of uninitialized value $_ in chr at - line 9.
1070Use of uninitialized value $m1 in chr at - line 10.
1071Use of uninitialized value $_ in ucfirst at - line 12.
1072Use of uninitialized value $m1 in ucfirst at - line 13.
1073Use of uninitialized value $_ in lcfirst at - line 14.
1074Use of uninitialized value $m1 in lcfirst at - line 15.
1075Use of uninitialized value $_ in uc at - line 16.
1076Use of uninitialized value $m1 in uc at - line 17.
1077Use of uninitialized value $_ in lc at - line 18.
1078Use of uninitialized value $m1 in lc at - line 19.
1079Use of uninitialized value $_ in quotemeta at - line 21.
1080Use of uninitialized value $m1 in quotemeta at - line 22.
1081########
1082use warnings 'uninitialized';
1083my ($m1, $v1, $v2, $v3, $v4);
1084our ($g1);
1085
1086($v1,$v2,$v3,$v4) = split;
1087($v1,$v2,$v3,$v4) = split $m1;
1088($v1,$v2,$v3,$v4) = split $m1, $m2;
1089($v1,$v2,$v3,$v4) = split $m1, $m2, $g1;
1090
1091$v1 = join $m1;
1092$v2 = join $m1, $m2;
1093$v3 = join $m1, $m2, $m3;
1094EXPECT
1095Use of uninitialized value $_ in split at - line 5.
1096Use of uninitialized value $m1 in regexp compilation at - line 6.
1097Use of uninitialized value $_ in split at - line 6.
1098Use of uninitialized value $m1 in regexp compilation at - line 7.
1099Use of uninitialized value $m2 in split at - line 7.
1100Use of uninitialized value $m1 in regexp compilation at - line 8.
1101Use of uninitialized value $g1 in split at - line 8.
1102Use of uninitialized value $m2 in split at - line 8.
1103Use of uninitialized value $m1 in join or string at - line 10.
1104Use of uninitialized value $m2 in join or string at - line 11.
1105Use of uninitialized value $m1 in join or string at - line 12.
1106Use of uninitialized value $m2 in join or string at - line 12.
1107Use of uninitialized value $m3 in join or string at - line 12.
1108########
1109use warnings 'uninitialized';
1110my ($m1, $m2, @ma, $v);
1111
1112our @foo1=(1,undef); chomp @foo1;
1113my  @foo2=(1,undef); chomp @foo2;
1114our @foo3=(1,undef); chop  @foo3;
1115my  @foo4=(1,undef); chop  @foo4;
1116our @foo5=(1,undef); $v = sprintf "%s%s",@foo5;
1117my  @foo6=(1,undef); $v = sprintf "%s%s",@foo6;
1118our %foo7=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo7;
1119my  %foo8=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo8;
1120our @foo9 =(1,undef); $v = sprintf "%s%s%s%s",$m1,@foo9, $ma[2];
1121my  @foo10=(1,undef); $v = sprintf "%s%s%s%s",$m2,@foo10,$ma[2];
1122our %foo11=('foo'=>'bar','baz'=>undef); $v = join '', %foo11;
1123my  %foo12=('foo'=>'bar','baz'=>undef); $v = join '', %foo12;
1124our %foo13=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo13;
1125my  %foo14=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo14;
1126EXPECT
1127Use of uninitialized value $foo1[1] in chomp at - line 4.
1128Use of uninitialized value $foo2[1] in chomp at - line 5.
1129Use of uninitialized value $foo3[1] in chop at - line 6.
1130Use of uninitialized value $foo4[1] in chop at - line 7.
1131Use of uninitialized value $foo5[1] in sprintf at - line 8.
1132Use of uninitialized value $foo6[1] in sprintf at - line 9.
1133Use of uninitialized value $foo7{"baz"} in sprintf at - line 10.
1134Use of uninitialized value $foo8{"baz"} in sprintf at - line 11.
1135Use of uninitialized value $m1 in sprintf at - line 12.
1136Use of uninitialized value $foo9[1] in sprintf at - line 12.
1137Use of uninitialized value in sprintf at - line 12.
1138Use of uninitialized value $m2 in sprintf at - line 13.
1139Use of uninitialized value $foo10[1] in sprintf at - line 13.
1140Use of uninitialized value in sprintf at - line 13.
1141Use of uninitialized value $foo11{"baz"} in join or string at - line 14.
1142Use of uninitialized value $foo12{"baz"} in join or string at - line 15.
1143Use of uninitialized value within %foo13 in join or string at - line 16.
1144Use of uninitialized value within %foo14 in join or string at - line 17.
1145########
1146use warnings 'uninitialized';
1147my ($v);
1148
1149undef $^A; $v = $^A + ${^FOO}; # should output '^A' not chr(1)
1150*GLOB1 = *GLOB2;
1151$v = $GLOB1 + 1;
1152$v = $GLOB2 + 1;
1153EXPECT
1154Use of uninitialized value $^FOO in addition (+) at - line 4.
1155Use of uninitialized value $^A in addition (+) at - line 4.
1156Use of uninitialized value $GLOB1 in addition (+) at - line 6.
1157Use of uninitialized value $GLOB2 in addition (+) at - line 7.
1158########
1159use warnings 'uninitialized';
1160my ($v);
1161
1162# check hash key is sanitised
1163my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef);
1164$v = join '', %h;
1165EXPECT
1166Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6.
1167########
1168use warnings 'uninitialized';
1169my ($m1, $v);
1170our ($g1);
1171
1172$v = eval { \&$m1 };
1173$v = eval { \&$g1 };
1174
1175my @a;
1176@a = splice @a, $m1, $g1;
1177$v = 1 + splice @a, $m1, $g1;
1178
1179my $x = bless [], 'Z';
1180eval { $x->$m1() };
1181
1182eval { &$m1() };
1183eval { &$g1() };
1184
1185warn $m1,$g1,"foo";
1186
1187eval { die $m1, $g1 };
1188
1189reset $m1;
1190reset $g1;
1191EXPECT
1192Use of uninitialized value $m1 in subroutine dereference at - line 5.
1193Use of uninitialized value $g1 in subroutine dereference at - line 6.
1194Use of uninitialized value $m1 in splice at - line 9.
1195Use of uninitialized value $g1 in splice at - line 9.
1196Use of uninitialized value $m1 in splice at - line 10.
1197Use of uninitialized value $g1 in splice at - line 10.
1198Use of uninitialized value in addition (+) at - line 10.
1199Use of uninitialized value $m1 in method lookup at - line 13.
1200Use of uninitialized value $m1 in warn at - line 18.
1201Use of uninitialized value $g1 in warn at - line 18.
1202foo at - line 18.
1203Use of uninitialized value $m1 in die at - line 20.
1204Use of uninitialized value $g1 in die at - line 20.
1205Use of uninitialized value $m1 in symbol reset at - line 22.
1206Use of uninitialized value $g1 in symbol reset at - line 23.
1207########
1208use warnings 'uninitialized';
1209my ($m1);
1210our ($g1);
1211
1212open FOO;		# accesses $FOO
1213my $foo = 'FO';
1214open($foo."O");	# accesses $FOO
1215open my $x;		# accesses ${*$x}
1216open $foobar;	# accesses ${*$foobar}
1217my $y;
1218open $y, $m1;
1219eval { open $y, $m1, $g1 };
1220open $y, '<', $g1;
1221
1222sysopen $y, $m1, $m2;
1223sysopen $y, $m1, $g1, $m2;
1224
1225my $old = umask;
1226umask $m1;
1227umask $g1;
1228umask $old;
1229
1230binmode STDIN, $m1;
1231EXPECT
1232Use of uninitialized value $FOO in open at - line 5.
1233Use of uninitialized value in open at - line 7.
1234Use of uninitialized value in open at - line 8.
1235Use of uninitialized value in open at - line 9.
1236Use of uninitialized value $m1 in open at - line 11.
1237Use of uninitialized value $m1 in open at - line 12.
1238Use of uninitialized value $g1 in open at - line 13.
1239Use of uninitialized value $m2 in sysopen at - line 15.
1240Use of uninitialized value $m1 in sysopen at - line 15.
1241Use of uninitialized value $m2 in sysopen at - line 16.
1242Use of uninitialized value $g1 in sysopen at - line 16.
1243Use of uninitialized value $m1 in sysopen at - line 16.
1244Use of uninitialized value $m1 in umask at - line 19.
1245Use of uninitialized value $g1 in umask at - line 20.
1246Use of uninitialized value $m1 in binmode at - line 23.
1247########
1248use warnings 'uninitialized';
1249my ($m1);
1250our ($g1);
1251
1252eval { my $x; tie $x, $m1 };
1253
1254eval { my $x; read    $m1, $x, $g1 };
1255eval { my $x; read    $m1, $x, $g1, $g2 };
1256eval { my $x; sysread $m1, $x, $g1 };
1257eval { my $x; sysread $m1, $x, $g1, $g2 };
1258EXPECT
1259Use of uninitialized value $m1 in tie at - line 5.
1260Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1261Use of uninitialized value $g1 in read at - line 7.
1262Use of uninitialized value $m1 in ref-to-glob cast at - line 8.
1263Use of uninitialized value $g1 in read at - line 8.
1264Use of uninitialized value $g2 in read at - line 8.
1265Use of uninitialized value $m1 in ref-to-glob cast at - line 9.
1266Use of uninitialized value $g1 in sysread at - line 9.
1267Use of uninitialized value $m1 in ref-to-glob cast at - line 10.
1268Use of uninitialized value $g1 in sysread at - line 10.
1269Use of uninitialized value $g2 in sysread at - line 10.
1270########
1271use warnings 'uninitialized';
1272my ($m1);
1273our ($g1, @ga);
1274
1275printf $m1;
1276printf STDERR "%d%d%d%d\n", $m1, $m2, $g1, $g2;
1277printf $ga[1000];
1278printf STDERR "FOO1:%s\n", $ga[1000];
1279printf STDERR "FOO2:%s%s%s%s\n", $m1, $g1, $ga[1],$m2;
1280printf STDERR "FOO3:%s%s%s\n", "X", $ga[1],"Y";
1281EXPECT
1282Use of uninitialized value $m1 in printf at - line 5.
1283Use of uninitialized value $m1 in printf at - line 6.
1284Use of uninitialized value $m2 in printf at - line 6.
1285Use of uninitialized value $g1 in printf at - line 6.
1286Use of uninitialized value $g2 in printf at - line 6.
12870000
1288Use of uninitialized value in printf at - line 7.
1289Use of uninitialized value in printf at - line 8.
1290FOO1:
1291Use of uninitialized value $m1 in printf at - line 9.
1292Use of uninitialized value $g1 in printf at - line 9.
1293Use of uninitialized value in printf at - line 9.
1294Use of uninitialized value $m2 in printf at - line 9.
1295FOO2:
1296Use of uninitialized value in printf at - line 10.
1297FOO3:XY
1298########
1299use warnings 'uninitialized';
1300my ($m1);
1301our ($g1);
1302
1303eval { my $x; seek    $x,$m1, $g1 };
1304eval { my $x; sysseek $x,$m1, $g1 };
1305eval { syswrite $m1, $g1 }; # logic changed - now won't try $g1 if $m1 is bad
1306# eval { syswrite STDERR, $m1 };        # XXX under utf8, can give
1307# eval { syswrite STDERR, $m1, $g1 };   # XXX different warnings
1308# eval { syswrite STDERR, $m1, $g1, $m2 };
1309eval { my $x; socket $x, $m1, $g1, $m2 };
1310eval { my ($x,$y); socketpair $x, $y, $m1, $g1, $m2 };
1311EXPECT
1312Use of uninitialized value $x in ref-to-glob cast at - line 5.
1313Use of uninitialized value $g1 in seek at - line 5.
1314Use of uninitialized value $m1 in seek at - line 5.
1315Use of uninitialized value $x in ref-to-glob cast at - line 6.
1316Use of uninitialized value $g1 in sysseek at - line 6.
1317Use of uninitialized value $m1 in sysseek at - line 6.
1318Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1319Use of uninitialized value $m2 in socket at - line 11.
1320Use of uninitialized value $g1 in socket at - line 11.
1321Use of uninitialized value $m1 in socket at - line 11.
1322Use of uninitialized value $m2 in socketpair at - line 12.
1323Use of uninitialized value $g1 in socketpair at - line 12.
1324Use of uninitialized value $m1 in socketpair at - line 12.
1325########
1326use Config;
1327BEGIN {
1328  if ( !$Config{d_flock} &&
1329       !$Config{d_fcntl_can_lock} &&
1330       !$Config{d_lockf} ) {
1331    print <<EOM ;
1332SKIPPED
1333# flock not present
1334EOM
1335    exit ;
1336  }
1337}
1338use warnings 'uninitialized';
1339our ($g1);
1340
1341eval { my $x; flock $x, $g1 };
1342EXPECT
1343Use of uninitialized value $x in ref-to-glob cast at - line 16.
1344Use of uninitialized value $g1 in flock at - line 16.
1345########
1346use warnings 'uninitialized';
1347my ($m1, $v);
1348our ($g1);
1349
1350stat;
1351lstat;
1352stat $m1;
1353lstat $g1;
1354
1355$v = -R $m1;
1356$v = -W $m1;
1357$v = -X $m1;
1358$v = -r $m1;
1359$v = -w $m1;
1360$v = -x $m1;
1361$v = -e $m1;
1362$v = -o $m1;
1363$v = -O $m1;
1364$v = -z $m1;
1365$v = -s $m1;
1366$v = -M $m1;
1367$v = -A $m1;
1368$v = -C $m1;
1369$v = -S $m1;
1370$v = -c $m1;
1371$v = -b $m1;
1372$v = -f $m1;
1373$v = -d $m1;
1374$v = -p $m1;
1375$v = -l $m1;
1376$v = -u $m1;
1377$v = -g $m1;
1378# $v = -k $m1; # XXX this is a no-op under win32
1379$v = -t $m1;
1380$v = -T $m1;
1381$v = -B $m1;
1382EXPECT
1383Use of uninitialized value $_ in stat at - line 5.
1384Use of uninitialized value $_ in lstat at - line 6.
1385Use of uninitialized value $m1 in stat at - line 7.
1386Use of uninitialized value $g1 in lstat at - line 8.
1387Use of uninitialized value $m1 in -R at - line 10.
1388Use of uninitialized value $m1 in -W at - line 11.
1389Use of uninitialized value $m1 in -X at - line 12.
1390Use of uninitialized value $m1 in -r at - line 13.
1391Use of uninitialized value $m1 in -w at - line 14.
1392Use of uninitialized value $m1 in -x at - line 15.
1393Use of uninitialized value $m1 in -e at - line 16.
1394Use of uninitialized value $m1 in -o at - line 17.
1395Use of uninitialized value $m1 in -O at - line 18.
1396Use of uninitialized value $m1 in -z at - line 19.
1397Use of uninitialized value $m1 in -s at - line 20.
1398Use of uninitialized value $m1 in -M at - line 21.
1399Use of uninitialized value $m1 in -A at - line 22.
1400Use of uninitialized value $m1 in -C at - line 23.
1401Use of uninitialized value $m1 in -S at - line 24.
1402Use of uninitialized value $m1 in -c at - line 25.
1403Use of uninitialized value $m1 in -b at - line 26.
1404Use of uninitialized value $m1 in -f at - line 27.
1405Use of uninitialized value $m1 in -d at - line 28.
1406Use of uninitialized value $m1 in -p at - line 29.
1407Use of uninitialized value $m1 in -l at - line 30.
1408Use of uninitialized value $m1 in -u at - line 31.
1409Use of uninitialized value $m1 in -g at - line 32.
1410Use of uninitialized value $m1 in -t at - line 34.
1411Use of uninitialized value $m1 in -T at - line 35.
1412Use of uninitialized value $m1 in -B at - line 36.
1413########
1414use warnings 'uninitialized';
1415my ($m1, $v);
1416our ($g1);
1417
1418$v = localtime $m1;
1419$v = gmtime $g1;
1420EXPECT
1421Use of uninitialized value $m1 in localtime at - line 5.
1422Use of uninitialized value $g1 in gmtime at - line 6.
1423########
1424use warnings 'uninitialized';
1425my ($m1, $m2, $v);
1426
1427$v = eval;
1428$v = eval $m1;
1429$m2 = q($m1); $v = 1 + eval $m2;
1430EXPECT
1431Use of uninitialized value $_ in eval "string" at - line 4.
1432Use of uninitialized value $m1 in eval "string" at - line 5.
1433Use of uninitialized value in addition (+) at - line 6.
1434########
1435use warnings 'uninitialized';
1436my ($m1);
1437
1438exit $m1;
1439EXPECT
1440Use of uninitialized value $m1 in exit at - line 4.
1441########
1442use warnings 'uninitialized';
1443my $undef;
1444
1445if ($undef == 3) {
1446} elsif ($undef == 0) {
1447}
1448EXPECT
1449Use of uninitialized value $undef in numeric eq (==) at - line 4.
1450Use of uninitialized value $undef in numeric eq (==) at - line 5.
1451########
1452# TODO long standing bug - conditions of while loops
1453use warnings;
1454
1455my $c;
1456my $d = 1;
1457while ($c == 0 && $d) {
1458  # a
1459  # few
1460  # blank
1461  # lines
1462  undef $d;
1463}
1464EXPECT
1465Use of uninitialized value $c in numeric eq (==) at - line 5.
1466Use of uninitialized value $c in numeric eq (==) at - line 5.
1467########
1468# TODO long standing bug - conditions of until loops
1469use warnings;
1470
1471my $c;
1472my $d;
1473until ($c == 1) {
1474  # a
1475  # few
1476  # blank
1477  # lines
1478  $c = 1 if ++$d == 2;
1479}
1480EXPECT
1481Use of uninitialized value $c in numeric eq (==) at - line 5.
1482Use of uninitialized value $c in numeric eq (==) at - line 5.
1483########
1484# TODO long standing bug - conditions of for loops
1485use warnings;
1486
1487my $c;
1488my $d;
1489for ($d = 1; $c == 0 && $d; ) {
1490  # a
1491  # few
1492  # blank
1493  # lines
1494  undef $d;
1495}
1496
1497my $e;
1498for ($d = 2; $d > 0; $e = !($c == 0)) {
1499  # a
1500  # few
1501  # blank
1502  # lines
1503  --$d;
1504}
1505EXPECT
1506Use of uninitialized value $c in numeric eq (==) at - line 5.
1507Use of uninitialized value $c in numeric eq (==) at - line 5.
1508Use of uninitialized value $c in numeric eq (==) at - line 14.
1509Use of uninitialized value $c in numeric eq (==) at - line 14.
1510########
1511# TODO long standing bug - more general variant of the above problem
1512use warnings;
1513my $undef;
1514
1515my $a = $undef + 1;
1516my $b
1517  = $undef
1518  + 1;
1519EXPECT
1520Use of uninitialized value $undef in addition (+) at - line 4.
1521Use of uninitialized value $undef in addition (+) at - line 7.
1522########
1523use warnings 'uninitialized';
1524my ($r1, $r2);
1525$_ = undef;
1526$v = reverse;
1527$v = reverse $r1;
1528$v = reverse "abc", $r2, "def";
1529EXPECT
1530Use of uninitialized value in reverse at - line 4.
1531Use of uninitialized value $r1 in reverse at - line 5.
1532Use of uninitialized value $r2 in reverse at - line 6.
1533########
1534use warnings 'uninitialized';
1535#
1536# ops that can return undef for defined args
1537# split into separate tests to diagnose the cause of daily build smoke
1538#
1539# *** `` not tested: Windows produces an error on STDERR
1540# *** ditto qx()
1541# *** pipe() not tested
1542# *** ioctl not tested
1543# *** socket not tested
1544# *** socketpair not tested
1545# *** bind not tested
1546# *** connect not tested
1547# *** listen not tested
1548# *** shutdown not tested
1549# *** setsockopt not tested
1550# *** getpeername not tested
1551# *** readdir not tested
1552# *** telldir not tested
1553# *** seekdir not tested
1554# *** rewinddir not tested
1555# *** closedir not tested
1556# *** gmtime not tested
1557# *** alarm not tested
1558# *** semget not tested
1559# *** getlogin not tested
1560EXPECT
1561########
1562use warnings 'uninitialized';
1563if ($^O eq 'MSWin32') {
1564    print <<'EOM';
1565SKIPPED
1566# `` produces an error on STDERR on Win32
1567EOM
1568    exit;
1569}
1570my $nocmd  = '/no/such/command';
1571my $v;
1572$v = 1 + `$nocmd`;
1573EXPECT
1574Use of uninitialized value in addition (+) at - line 11.
1575########
1576use warnings 'uninitialized';
1577if ($^O eq 'MSWin32') {
1578    print <<'EOM';
1579SKIPPED
1580# qx produces an error on STDERR on Win32
1581EOM
1582    exit;
1583}
1584my $nocmd  = '/no/such/command';
1585my $v;
1586$v = 1 + qx($nocmd);
1587EXPECT
1588Use of uninitialized value in addition (+) at - line 11.
1589########
1590use warnings 'uninitialized';
1591my $nan = "NaN";
1592if ($nan == $nan) {
1593    print <<'EOM';
1594SKIPPED
1595# NaN not supported here.
1596EOM
1597    exit;
1598}
1599my $v;
1600$v = 1 + ($nan <=> 1);
1601EXPECT
1602Use of uninitialized value in addition (+) at - line 11.
1603########
1604use warnings 'uninitialized';
1605if ($^O eq 'MSWin32') {
1606    print <<'EOM';
1607SKIPPED
1608# -k produces no warning on Win32
1609EOM
1610    exit;
1611}
1612my $nofile = '/no/such/file';
1613my $v;
1614$v = 1 + -k $nofile;
1615EXPECT
1616Use of uninitialized value in addition (+) at - line 11.
1617########
1618use warnings 'uninitialized';
1619my $nofile = '/no/such/file';
1620my $v;
1621my $f = "";
1622$v = 1 + open($f, $nofile);
1623EXPECT
1624Use of uninitialized value in addition (+) at - line 5.
1625########
1626use warnings 'uninitialized';
1627my $nofile = '/no/such/file';
1628my $v;
1629$v = 1 + fileno($nofile);
1630EXPECT
1631Use of uninitialized value in addition (+) at - line 4.
1632########
1633use warnings 'uninitialized';
1634my $nofile = '/no/such/file';
1635my $v;
1636$v = 1 + binmode($nofile);
1637EXPECT
1638Use of uninitialized value in addition (+) at - line 4.
1639########
1640use warnings 'uninitialized';
1641my $nofile = '/no/such/file';
1642my $v;
1643$v = 1 + tied($nofile);
1644EXPECT
1645Use of uninitialized value in addition (+) at - line 4.
1646########
1647use warnings 'uninitialized';
1648my $nofile = '/no/such/file';
1649my $v;
1650$v = 1 + getc($nofile);
1651EXPECT
1652Use of uninitialized value in addition (+) at - line 4.
1653########
1654use warnings 'uninitialized';
1655my $nofile = '/no/such/file';
1656my $v;
1657$v = 1 + sysread($nofile, my $buf,1);
1658EXPECT
1659Use of uninitialized value in addition (+) at - line 4.
1660########
1661use warnings 'uninitialized';
1662my $nofile = '/no/such/file';
1663my $v;
1664$v = 1 + eval { send($nofile, $buf,0) };
1665EXPECT
1666Use of uninitialized value in addition (+) at - line 4.
1667########
1668use warnings 'uninitialized';
1669my $nofile = '/no/such/file';
1670my $v;
1671my $fh = "";
1672$v = 1 + eval { accept($fh, $nofile) };
1673EXPECT
1674Use of uninitialized value in addition (+) at - line 5.
1675########
1676use warnings 'uninitialized';
1677my $nofile = '/no/such/file';
1678my $v;
1679$v = 1 + (-r $nofile);
1680EXPECT
1681Use of uninitialized value in addition (+) at - line 4.
1682########
1683use warnings 'uninitialized';
1684my $nofile = '/no/such/file';
1685my $v;
1686$v = 1 + (-w $nofile);
1687EXPECT
1688Use of uninitialized value in addition (+) at - line 4.
1689########
1690use warnings 'uninitialized';
1691my $nofile = '/no/such/file';
1692my $v;
1693$v = 1 + (-x $nofile);
1694EXPECT
1695Use of uninitialized value in addition (+) at - line 4.
1696########
1697use warnings 'uninitialized';
1698my $nofile = '/no/such/file';
1699my $v;
1700$v = 1 + (-o $nofile);
1701EXPECT
1702Use of uninitialized value in addition (+) at - line 4.
1703########
1704use warnings 'uninitialized';
1705my $nofile = '/no/such/file';
1706my $v;
1707$v = 1 + (-R $nofile);
1708EXPECT
1709Use of uninitialized value in addition (+) at - line 4.
1710########
1711use warnings 'uninitialized';
1712my $nofile = '/no/such/file';
1713my $v;
1714$v = 1 + (-W $nofile);
1715EXPECT
1716Use of uninitialized value in addition (+) at - line 4.
1717########
1718use warnings 'uninitialized';
1719my $nofile = '/no/such/file';
1720my $v;
1721$v = 1 + (-X $nofile);
1722EXPECT
1723Use of uninitialized value in addition (+) at - line 4.
1724########
1725use warnings 'uninitialized';
1726my $nofile = '/no/such/file';
1727my $v;
1728$v = 1 + (-O $nofile);
1729EXPECT
1730Use of uninitialized value in addition (+) at - line 4.
1731########
1732use warnings 'uninitialized';
1733my $nofile = '/no/such/file';
1734my $v;
1735$v = 1 + (-e $nofile);
1736EXPECT
1737Use of uninitialized value in addition (+) at - line 4.
1738########
1739use warnings 'uninitialized';
1740my $nofile = '/no/such/file';
1741my $v;
1742$v = 1 + (-z $nofile);
1743EXPECT
1744Use of uninitialized value in addition (+) at - line 4.
1745########
1746use warnings 'uninitialized';
1747my $nofile = '/no/such/file';
1748my $v;
1749$v = 1 + (-s $nofile);
1750EXPECT
1751Use of uninitialized value in addition (+) at - line 4.
1752########
1753use warnings 'uninitialized';
1754my $nofile = '/no/such/file';
1755my $v;
1756$v = 1 + (-f $nofile);
1757EXPECT
1758Use of uninitialized value in addition (+) at - line 4.
1759########
1760use warnings 'uninitialized';
1761my $nofile = '/no/such/file';
1762my $v;
1763$v = 1 + (-d $nofile);
1764EXPECT
1765Use of uninitialized value in addition (+) at - line 4.
1766########
1767use warnings 'uninitialized';
1768my $nofile = '/no/such/file';
1769my $v;
1770$v = 1 + (-l $nofile);
1771EXPECT
1772Use of uninitialized value in addition (+) at - line 4.
1773########
1774use warnings 'uninitialized';
1775my $nofile = '/no/such/file';
1776my $v;
1777$v = 1 + (-p $nofile);
1778EXPECT
1779Use of uninitialized value in addition (+) at - line 4.
1780########
1781use warnings 'uninitialized';
1782my $nofile = '/no/such/file';
1783my $v;
1784$v = 1 + (-S $nofile);
1785EXPECT
1786Use of uninitialized value in addition (+) at - line 4.
1787########
1788use warnings 'uninitialized';
1789my $nofile = '/no/such/file';
1790my $v;
1791$v = 1 + (-b $nofile);
1792EXPECT
1793Use of uninitialized value in addition (+) at - line 4.
1794########
1795use warnings 'uninitialized';
1796my $nofile = '/no/such/file';
1797my $v;
1798$v = 1 + (-c $nofile);
1799EXPECT
1800Use of uninitialized value in addition (+) at - line 4.
1801########
1802use warnings 'uninitialized';
1803my $nofile = '/no/such/file';
1804my $v;
1805$v = 1 + (-t $nofile);
1806EXPECT
1807Use of uninitialized value in addition (+) at - line 4.
1808########
1809use warnings 'uninitialized';
1810my $nofile = '/no/such/file';
1811my $v;
1812$v = 1 + (-u $nofile);
1813EXPECT
1814Use of uninitialized value in addition (+) at - line 4.
1815########
1816use warnings 'uninitialized';
1817my $nofile = '/no/such/file';
1818my $v;
1819$v = 1 + (-g $nofile);
1820EXPECT
1821Use of uninitialized value in addition (+) at - line 4.
1822########
1823use warnings 'uninitialized';
1824my $nofile = '/no/such/file';
1825my $v;
1826$v = 1 + (-T $nofile);
1827EXPECT
1828Use of uninitialized value in addition (+) at - line 4.
1829########
1830use warnings 'uninitialized';
1831my $nofile = '/no/such/file';
1832my $v;
1833$v = 1 + (-B $nofile);
1834EXPECT
1835Use of uninitialized value in addition (+) at - line 4.
1836########
1837use warnings 'uninitialized';
1838my $nofile = '/no/such/file';
1839my $v;
1840$v = 1 + (-M $nofile);
1841EXPECT
1842Use of uninitialized value in addition (+) at - line 4.
1843########
1844use warnings 'uninitialized';
1845my $nofile = '/no/such/file';
1846my $v;
1847$v = 1 + (-A $nofile);
1848EXPECT
1849Use of uninitialized value in addition (+) at - line 4.
1850########
1851use warnings 'uninitialized';
1852my $nofile = '/no/such/file';
1853my $v;
1854$v = 1 + (-C $nofile);
1855EXPECT
1856Use of uninitialized value in addition (+) at - line 4.
1857########
1858use warnings 'uninitialized';
1859my $nofile = '/no/such/file';
1860my $v;
1861$v = 1 + eval { readlink $nofile };
1862EXPECT
1863Use of uninitialized value in addition (+) at - line 4.
1864########
1865use warnings 'uninitialized';
1866my $nofile = '/no/such/file';
1867my $v;
1868$v = 1 + opendir($f, $nofile);
1869EXPECT
1870Use of uninitialized value in addition (+) at - line 4.
1871########
1872use warnings 'uninitialized';
1873my $nofile = '/no/such/file';
1874my $v;
1875$v = 1 + undef;
1876EXPECT
1877Use of uninitialized value in addition (+) at - line 4.
1878########
1879use warnings 'uninitialized';
1880my $nofile = '/no/such/file';
1881my $v;
1882my $x = 1; $v = 1 + undef($x);
1883EXPECT
1884Use of uninitialized value in addition (+) at - line 4.
1885########
1886use warnings 'uninitialized';
1887my $v;
1888my $emptys = "";
1889$v = 1 + substr($emptys,2,1);
1890EXPECT
1891Use of uninitialized value in addition (+) at - line 4.
1892########
1893use warnings 'uninitialized';
1894my $v;
1895my @emptya;
1896$v = 1 + each @emptya;
1897EXPECT
1898Use of uninitialized value in addition (+) at - line 4.
1899########
1900use warnings 'uninitialized';
1901my $v;
1902my %emptyh;
1903$v = 1 + each %emptyh;
1904EXPECT
1905Use of uninitialized value in addition (+) at - line 4.
1906########
1907use warnings 'uninitialized';
1908my $v;
1909my @emptya;
1910$v = 1 + sort @emptya;
1911EXPECT
1912Use of uninitialized value in addition (+) at - line 4.
1913########
1914use warnings 'uninitialized';
1915my $v;
1916my $zero = 0; $v = 1 + caller($zero);
1917EXPECT
1918Use of uninitialized value in addition (+) at - line 3.
1919########
1920use warnings 'uninitialized';
1921my $nofile = '/no/such/file';
1922my $v;
1923$v = 1 + do $nofile;
1924EXPECT
1925Use of uninitialized value in addition (+) at - line 4.
1926########
1927use warnings 'uninitialized';
1928my $v;
1929my $fn = sub {};
1930$v = 1 + prototype $fn;
1931EXPECT
1932Use of uninitialized value in addition (+) at - line 4.
1933########
1934use warnings 'uninitialized'; no warnings 'experimental::smartmatch';
1935my $v;
1936my $fn = sub {};
1937$v = 1 + (1 ~~ $fn);
1938EXPECT
1939Use of uninitialized value in addition (+) at - line 4.
1940########
1941use warnings 'uninitialized';
1942my $v;
1943my $f = "";
1944$v = 1 + (print STDIN $f); # print to STDIN returns undef
1945EXPECT
1946Use of uninitialized value in addition (+) at - line 4.
1947########
1948use warnings 'uninitialized';
1949my $v;
1950my $f = "";
1951$v = 1 + (printf STDIN "%s", $f);
1952EXPECT
1953Use of uninitialized value in addition (+) at - line 4.
1954########
1955use warnings 'uninitialized';
1956my $v;
1957my $f = "";
1958{ use feature 'say'; $v = 1 + (say STDIN "%s", $f); }
1959EXPECT
1960Use of uninitialized value in addition (+) at - line 4.
1961########
1962use warnings 'uninitialized';
1963my $v;
1964my $f = "";
1965$v = 1 + (unpack("",$f));
1966EXPECT
1967Use of uninitialized value in addition (+) at - line 4.
1968########
1969use warnings 'uninitialized';
1970my $nofile = '/no/such/file';
1971my $v;
1972my $f = "";
1973$v = 1 + sysopen($f, $nofile, 0);
1974EXPECT
1975Use of uninitialized value in addition (+) at - line 5.
1976########
1977use warnings 'uninitialized';
1978my $v;
1979{ my $x = -1; $v = 1 + sysseek(DATA, $x, 0); }
1980__END__
1981EXPECT
1982Use of uninitialized value in addition (+) at - line 3.
1983########
1984use warnings 'uninitialized';
1985delete $::{'Foo::'};
1986my $moo = $Foo::BAR + 42;
1987__END__
1988EXPECT
1989Use of uninitialized value in addition (+) at - line 3.
1990########
1991use warnings 'uninitialized';
1992use constant {u=>undef, v=>undef};
1993sub foo () {u}
1994sub foo () {v}
1995EXPECT
1996########
1997# [perl #72090]
1998use warnings 'uninitialized';
1999$a = @$a > 0;
2000EXPECT
2001Use of uninitialized value $a in array dereference at - line 3.
2002Use of uninitialized value in numeric gt (>) at - line 3.
2003########
2004# [perl #103766]
2005use warnings 'uninitialized';
2006"@{[ $x ]}";
2007EXPECT
2008Use of uninitialized value in join or string at - line 3.
2009########
2010# inside formats
2011use warnings 'uninitialized';
2012my $x;
2013format =
2014@
2015"$x";
2016.
2017write;
2018EXPECT
2019Use of uninitialized value $x in string at - line 6.
2020########
2021# NAME off-by-one error in hash bucket walk in key detection logic
2022use warnings 'uninitialized';
2023
2024for ( 0 .. 20 ) { # we assume that this means we test keys for every bucket
2025    my %h= ( $_ => undef );
2026    my $s= sprintf "%s", $h{$_};
2027}
2028EXPECT
2029Use of uninitialized value $h{"0"} in sprintf at - line 5.
2030Use of uninitialized value $h{"1"} in sprintf at - line 5.
2031Use of uninitialized value $h{"2"} in sprintf at - line 5.
2032Use of uninitialized value $h{"3"} in sprintf at - line 5.
2033Use of uninitialized value $h{"4"} in sprintf at - line 5.
2034Use of uninitialized value $h{"5"} in sprintf at - line 5.
2035Use of uninitialized value $h{"6"} in sprintf at - line 5.
2036Use of uninitialized value $h{"7"} in sprintf at - line 5.
2037Use of uninitialized value $h{"8"} in sprintf at - line 5.
2038Use of uninitialized value $h{"9"} in sprintf at - line 5.
2039Use of uninitialized value $h{"10"} in sprintf at - line 5.
2040Use of uninitialized value $h{"11"} in sprintf at - line 5.
2041Use of uninitialized value $h{"12"} in sprintf at - line 5.
2042Use of uninitialized value $h{"13"} in sprintf at - line 5.
2043Use of uninitialized value $h{"14"} in sprintf at - line 5.
2044Use of uninitialized value $h{"15"} in sprintf at - line 5.
2045Use of uninitialized value $h{"16"} in sprintf at - line 5.
2046Use of uninitialized value $h{"17"} in sprintf at - line 5.
2047Use of uninitialized value $h{"18"} in sprintf at - line 5.
2048Use of uninitialized value $h{"19"} in sprintf at - line 5.
2049Use of uninitialized value $h{"20"} in sprintf at - line 5.
2050########
2051# NAME SvPOK && SvLEN==0 should not produce uninit warning
2052use warnings 'uninitialized';
2053
2054$v = int(${qr||}); # sv_2iv on a regexp
2055$v = 1.1 *  ${qr||}; # sv_2nv on a regexp
2056$v = ${qr||} << 2; # sv_2uv on a regexp
2057
2058sub TIESCALAR{bless[]}
2059sub FETCH {${qr||}}
2060tie $t, "";
2061$v = 1.1 * $t; # sv_2nv on a tied regexp
2062
2063EXPECT
2064########
2065# multi-level uninitialised array/hash indexes
2066use warnings 'uninitialized';
2067
2068our ($i0, $i2, $i4, $i6, $i8, $i10, $i12);
2069my  ($i1, $i3, $i5, $i7, $i9, $i11, $i13);
2070
2071my (@a,%h);
2072my $v;
2073
2074
2075# use enough depth that OP_MULTIDEREF needs more than one action word
2076
2077$v = $a[$i0]{$i1}[$i2]{$i3}[$i4]{$i5}[$i6]{$i7}[$i8]{$i9}[$i10]{$i11}[$i12]{$i13};
2078$v = $h{$i0}[$i1]{$i2}[$i3]{$i4}[$i5]{$i6}[$i7]{$i8}[$i9]{$i10}[$i11]{$i12}[$i13];
2079
2080EXPECT
2081Use of uninitialized value $i0 in array element at - line 13.
2082Use of uninitialized value $i1 in hash element at - line 13.
2083Use of uninitialized value $i2 in array element at - line 13.
2084Use of uninitialized value $i3 in hash element at - line 13.
2085Use of uninitialized value $i4 in array element at - line 13.
2086Use of uninitialized value $i5 in hash element at - line 13.
2087Use of uninitialized value $i6 in array element at - line 13.
2088Use of uninitialized value $i7 in hash element at - line 13.
2089Use of uninitialized value $i8 in array element at - line 13.
2090Use of uninitialized value $i9 in hash element at - line 13.
2091Use of uninitialized value $i10 in array element at - line 13.
2092Use of uninitialized value $i11 in hash element at - line 13.
2093Use of uninitialized value $i12 in array element at - line 13.
2094Use of uninitialized value $i13 in hash element at - line 13.
2095Use of uninitialized value $i0 in hash element at - line 14.
2096Use of uninitialized value $i1 in array element at - line 14.
2097Use of uninitialized value $i2 in hash element at - line 14.
2098Use of uninitialized value $i3 in array element at - line 14.
2099Use of uninitialized value $i4 in hash element at - line 14.
2100Use of uninitialized value $i5 in array element at - line 14.
2101Use of uninitialized value $i6 in hash element at - line 14.
2102Use of uninitialized value $i7 in array element at - line 14.
2103Use of uninitialized value $i8 in hash element at - line 14.
2104Use of uninitialized value $i9 in array element at - line 14.
2105Use of uninitialized value $i10 in hash element at - line 14.
2106Use of uninitialized value $i11 in array element at - line 14.
2107Use of uninitialized value $i12 in hash element at - line 14.
2108Use of uninitialized value $i13 in array element at - line 14.
2109########
2110# misc multideref
2111use warnings 'uninitialized';
2112my ($i,$j,$k);
2113my @a;
2114my @ra = \@a;
2115my $v;
2116$v = exists $a[$i]{$k};
2117$v = delete $a[$i]{$k};
2118$v = local $a[$i]{$k};
2119delete $a[$i]{$k};
2120$v = $ra->[$i+$j]{$k};
2121$v = ($ra//0)->[$i]{$k};
2122$v = $a[length $i]{$k}
2123EXPECT
2124Use of uninitialized value $i in array element at - line 7.
2125Use of uninitialized value $k in exists at - line 7.
2126Use of uninitialized value $i in array element at - line 8.
2127Use of uninitialized value $k in delete at - line 8.
2128Use of uninitialized value $i in array element at - line 9.
2129Use of uninitialized value $k in hash element at - line 9.
2130Use of uninitialized value $k in hash element at - line 9.
2131Use of uninitialized value $k in hash element at - line 9.
2132Use of uninitialized value $i in array element at - line 10.
2133Use of uninitialized value $k in delete at - line 10.
2134Use of uninitialized value $j in addition (+) at - line 11.
2135Use of uninitialized value $i in addition (+) at - line 11.
2136Use of uninitialized value $k in hash element at - line 11.
2137Use of uninitialized value $i in array element at - line 12.
2138Use of uninitialized value $k in hash element at - line 12.
2139Use of uninitialized value $i in array element at - line 13.
2140Use of uninitialized value $k in hash element at - line 13.
2141