xref: /openbsd/gnu/usr.bin/perl/t/lib/warnings/9uninit (revision 73471bf0)
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;
407EXPECT
408Use of uninitialized value $m1 in scalar assignment at - line 4.
409Setting $/ to a reference to zero is forbidden at - line 4.
410########
411use warnings 'uninitialized';
412
413my $x = "abc";
414chomp $x; chop $x;
415my $y;
416chomp ($x, $y); chop ($x, $y);
417EXPECT
418Use of uninitialized value $y in chomp at - line 6.
419Use of uninitialized value $y in chop at - line 6.
420########
421use warnings 'uninitialized';
422my ($m1, @ma, %mh);
423our ($g1);
424
425delete $ma[$m1];
426delete @ma[$m1, $g1];
427delete $mh{$m1};
428delete @mh{$m1, $g1};
429EXPECT
430Use of uninitialized value $m1 in delete at - line 5.
431Use of uninitialized value $m1 in delete at - line 6.
432Use of uninitialized value $g1 in delete at - line 6.
433Use of uninitialized value $m1 in delete at - line 7.
434Use of uninitialized value $m1 in delete at - line 8.
435Use of uninitialized value $g1 in delete at - line 8.
436########
437use warnings 'uninitialized';
438my ($m1, @ma, %mh);
439our ($g1);
440
441my @a = @ma[$m1, $g1];
442@a = (4,5)[$m1, $g1];
443@a = @mh{$m1, $g1};
444EXPECT
445Use of uninitialized value $m1 in array slice at - line 5.
446Use of uninitialized value $g1 in array slice at - line 5.
447Use of uninitialized value $m1 in list slice at - line 6.
448Use of uninitialized value $g1 in list slice at - line 6.
449Use of uninitialized value $m1 in hash slice at - line 7.
450Use of uninitialized value $g1 in hash slice at - line 7.
451########
452use warnings 'uninitialized';
453my ($m1, @ma, %mh, $v);
454our ($g1, @ga, %gh);
455
456$v = exists $ma[$m1];
457$v = exists $ga[$g1];
458$v = exists $mh{$m1};
459$v = exists $gh{$g1};
460EXPECT
461Use of uninitialized value $m1 in exists at - line 5.
462Use of uninitialized value $g1 in exists at - line 6.
463Use of uninitialized value $m1 in exists at - line 7.
464Use of uninitialized value $g1 in exists at - line 8.
465########
466use warnings 'uninitialized';
467my ($m1, $m2);
468my ($v, @a);
469my ($t, $u) = (1, 1);
470
471local $.;
472
473@ma = (1   .. 2);
474@ma = ($t  .. 2);
475@ma = ($m1 .. 2);
476@ma = (1   .. $u);
477@ma = (1   .. $m2);
478
479@ma = (1   ... 2);
480@ma = ($t  ... 2);
481@ma = ($m1 ... 2);
482@ma = (1   ... $u);
483@ma = (1   ... $m2);
484
485$v = (1   .. 2);
486$v = ($t  .. 2);
487$v = ($m1 .. 2);
488$v = (1   .. $u);
489$v = (1   .. $m2);
490
491$v = (1   ... 2);
492$v = ($t  ... 2);
493$v = ($m1 ... 2);
494$v = (1   ... $u);
495$v = (1   ... $m2);
496EXPECT
497Use of uninitialized value $m1 in range (or flop) at - line 10.
498Use of uninitialized value $m2 in range (or flop) at - line 12.
499Use of uninitialized value $m1 in range (or flop) at - line 16.
500Use of uninitialized value $m2 in range (or flop) at - line 18.
501Use of uninitialized value $. in range (or flip) at - line 20.
502Use of uninitialized value $. in range (or flop) at - line 21.
503Use of uninitialized value $. in range (or flip) at - line 23.
504Use of uninitialized value $. in range (or flip) at - line 24.
505Use of uninitialized value $. in range (or flip) at - line 26.
506Use of uninitialized value $. in range (or flip) at - line 29.
507Use of uninitialized value $. in range (or flip) at - line 30.
508########
509use warnings 'uninitialized';
510my ($m1, $m2);
511my ($v, @a);
512my ($t, $u) = (1, 1);
513
514@ma = ($t  .. $u);
515@ma = ($m1 .. $u);
516@ma = ($t  .. $m2);
517@ma = ($m1 .. $m2);
518
519@ma = ($t  ... $u);
520@ma = ($m1 ... $u);
521@ma = ($t  ... $m2);
522@ma = ($m1 ... $m2);
523
524$v = ($t  .. $u);
525$v = ($m1 .. $u);
526$v = ($t  .. $m2);
527$v = ($m1 .. $m2);
528
529$v = ($t  ... $u);
530$v = ($m1 ... $u);
531$v = ($t  ... $m2);
532$v = ($m1 ... $m2);
533EXPECT
534Use of uninitialized value $m1 in range (or flop) at - line 7.
535Use of uninitialized value $m2 in range (or flop) at - line 8.
536Use of uninitialized value $m1 in range (or flop) at - line 9.
537Use of uninitialized value $m2 in range (or flop) at - line 9.
538Use of uninitialized value $m1 in range (or flop) at - line 12.
539Use of uninitialized value $m2 in range (or flop) at - line 13.
540Use of uninitialized value $m1 in range (or flop) at - line 14.
541Use of uninitialized value $m2 in range (or flop) at - line 14.
542########
543use warnings 'uninitialized';
544my ($m1, $v);
545our ($g1);
546
547my ($x1,$x2);
548$v = $x1 << $m1;
549$v = $x2 << $g1;
550EXPECT
551Use of uninitialized value $m1 in left bitshift (<<) at - line 6.
552Use of uninitialized value $x1 in left bitshift (<<) at - line 6.
553Use of uninitialized value $g1 in left bitshift (<<) at - line 7.
554Use of uninitialized value $x2 in left bitshift (<<) at - line 7.
555########
556use warnings 'uninitialized';
557my ($m1, $m2, $v);
558our ($g1, $g2);
559
560use integer;
561$v = $m1 + $g1;
562$v = $m1 - $g1;
563$v = $m1 * $g1;
564eval {$v = $m1 / $g1};
565$v = $m2 / 2;
566eval {$v = $m1 % $g1};
567$v = $m2 % 2;
568$v = $m1 < $g1;
569$v = $m1 > $g1;
570$v = $m1 <= $g1;
571$v = $m1 >= $g1;
572$v = $m1 == $g1;
573$v = $m1 != $g1;
574$v = $m1 <=> $g1;
575$v = -$m1;
576EXPECT
577Use of uninitialized value $g1 in integer addition (+) at - line 6.
578Use of uninitialized value $m1 in integer addition (+) at - line 6.
579Use of uninitialized value $g1 in integer subtraction (-) at - line 7.
580Use of uninitialized value $m1 in integer subtraction (-) at - line 7.
581Use of uninitialized value $g1 in integer multiplication (*) at - line 8.
582Use of uninitialized value $m1 in integer multiplication (*) at - line 8.
583Use of uninitialized value $g1 in integer division (/) at - line 9.
584Use of uninitialized value $m2 in integer division (/) at - line 10.
585Use of uninitialized value $g1 in integer modulus (%) at - line 11.
586Use of uninitialized value $m1 in integer modulus (%) at - line 11.
587Use of uninitialized value $m2 in integer modulus (%) at - line 12.
588Use of uninitialized value $g1 in integer lt (<) at - line 13.
589Use of uninitialized value $m1 in integer lt (<) at - line 13.
590Use of uninitialized value $g1 in integer gt (>) at - line 14.
591Use of uninitialized value $m1 in integer gt (>) at - line 14.
592Use of uninitialized value $g1 in integer le (<=) at - line 15.
593Use of uninitialized value $m1 in integer le (<=) at - line 15.
594Use of uninitialized value $g1 in integer ge (>=) at - line 16.
595Use of uninitialized value $m1 in integer ge (>=) at - line 16.
596Use of uninitialized value $g1 in integer eq (==) at - line 17.
597Use of uninitialized value $m1 in integer eq (==) at - line 17.
598Use of uninitialized value $g1 in integer ne (!=) at - line 18.
599Use of uninitialized value $m1 in integer ne (!=) at - line 18.
600Use of uninitialized value $g1 in integer comparison (<=>) at - line 19.
601Use of uninitialized value $m1 in integer comparison (<=>) at - line 19.
602Use of uninitialized value $m1 in integer negation (-) at - line 20.
603########
604use warnings 'uninitialized';
605my ($m1, $m2, $v);
606our ($g1, $g2);
607
608$v = int($g1);
609$v = abs($g2);
610EXPECT
611Use of uninitialized value $g1 in int at - line 5.
612Use of uninitialized value $g2 in abs at - line 6.
613########
614use warnings 'uninitialized';
615my ($m1, $m2, $v);
616our ($g1);
617
618$v = pack $m1;
619$v = pack "i*", $m2, $g1, $g2;
620my @unpack = unpack $m1, $m2;
621EXPECT
622Use of uninitialized value $m1 in pack at - line 5.
623Use of uninitialized value $m2 in pack at - line 6.
624Use of uninitialized value $g1 in pack at - line 6.
625Use of uninitialized value $g2 in pack at - line 6.
626Use of uninitialized value $m1 in unpack at - line 7.
627Use of uninitialized value $m2 in unpack at - line 7.
628########
629use warnings 'uninitialized';
630my ($m1);
631our ($g1);
632
633my @sort;
634@sort = sort $m1, $g1;
635@sort = sort {$a <=> $b} $m1, $g1;
636sub sortf {$a-1 <=> $b-1};
637@sort = sort  &sortf, $m1, $g1;
638@sort = sort { undef } 1, 2;
639sub frobnicate($$) { undef }
640@sort = sort frobnicate 1, 2;
641@sort = sort pyfg 1, 2;
642@sort = sort pyfgc 1, 2;
643no warnings;
644sub pyfg { undef }
645sub pyfgc($$) { undef }
646use warnings;
647sub dog {}
648sub dogwood($$) {}
649@sort = sort dog     1,2;
650@sort = sort dogwood 1,2;
651EXPECT
652Use of uninitialized value $m1 in sort at - line 6.
653Use of uninitialized value $g1 in sort at - line 6.
654Use of uninitialized value $m1 in sort at - line 6.
655Use of uninitialized value $g1 in sort at - line 6.
656Use of uninitialized value $m1 in sort at - line 7.
657Use of uninitialized value $g1 in sort at - line 7.
658Use of uninitialized value $g1 in sort at - line 7.
659Use of uninitialized value $m1 in sort at - line 7.
660Use of uninitialized value $a in subtraction (-) at - line 8.
661Use of uninitialized value $b in subtraction (-) at - line 8.
662Use of uninitialized value $m1 in sort at - line 9.
663Use of uninitialized value $g1 in sort at - line 9.
664Use of uninitialized value $m1 in sort at - line 9.
665Use of uninitialized value $m1 in sort at - line 9.
666Use of uninitialized value $g1 in sort at - line 9.
667Use of uninitialized value $g1 in sort at - line 9.
668Use of uninitialized value in sort at - line 10.
669Use of uninitialized value in sort at - line 12.
670Use of uninitialized value in sort at - line 13.
671Use of uninitialized value in sort at - line 14.
672Use of uninitialized value in sort at - line 21.
673Use of uninitialized value in sort at - line 22.
674########
675use Config;
676unless ($Config{d_double_has_inf} && $Config{d_double_has_nan}) {
677    print <<EOM ;
678SKIPPED
679# No inf/nan support
680EOM
681    exit ;
682}
683my $nan = eval 'sin 9**9**9';
684if ($nan == $nan) {
685    print <<EOM ;
686SKIPPED
687# No nan support
688EOM
689    exit ;
690}
691use warnings 'uninitialized';
692# The optimised {$a<=>$b} case should behave the same way as unoptimised.
693@sort = sort { ($a)[0] <=> $b } 1, $nan;
694@sort = sort {  $a     <=> $b } 1, $nan;
695EXPECT
696Use of uninitialized value in sort at - line 19.
697Use of uninitialized value in sort at - line 20.
698########
699use warnings 'uninitialized';
700my ($m1, $m2, $v);
701our ($g1);
702
703eval { $v = $m1 / $g1 };
704$v = $m2 / 2;
705eval { $v = $m1 % $g1 };
706$v = $m2 % 2;
707$v = $m1 == $g1;
708$v = $m1 >= $g1;
709$v = $m1 >  $g1;
710$v = $m1 <= $g1;
711$v = $m1 <  $g1;
712$v = $m1 *  $g1;
713$v = $m1 <=>$g1;
714$v = $m1 != $g1;
715$v = $m1   -$g1;
716$v = $m1 ** $g1;
717$v = $m1 +  $g1;
718$v = $m1 -  $g1;
719EXPECT
720Use of uninitialized value $g1 in division (/) at - line 5.
721Use of uninitialized value $m1 in division (/) at - line 5.
722Use of uninitialized value $m2 in division (/) at - line 6.
723Use of uninitialized value $g1 in modulus (%) at - line 7.
724Use of uninitialized value $m1 in modulus (%) at - line 7.
725Use of uninitialized value $m2 in modulus (%) at - line 8.
726Use of uninitialized value $g1 in numeric eq (==) at - line 9.
727Use of uninitialized value $m1 in numeric eq (==) at - line 9.
728Use of uninitialized value $g1 in numeric ge (>=) at - line 10.
729Use of uninitialized value $m1 in numeric ge (>=) at - line 10.
730Use of uninitialized value $g1 in numeric gt (>) at - line 11.
731Use of uninitialized value $m1 in numeric gt (>) at - line 11.
732Use of uninitialized value $g1 in numeric le (<=) at - line 12.
733Use of uninitialized value $m1 in numeric le (<=) at - line 12.
734Use of uninitialized value $g1 in numeric lt (<) at - line 13.
735Use of uninitialized value $m1 in numeric lt (<) at - line 13.
736Use of uninitialized value $g1 in multiplication (*) at - line 14.
737Use of uninitialized value $m1 in multiplication (*) at - line 14.
738Use of uninitialized value $g1 in numeric comparison (<=>) at - line 15.
739Use of uninitialized value $m1 in numeric comparison (<=>) at - line 15.
740Use of uninitialized value $g1 in numeric ne (!=) at - line 16.
741Use of uninitialized value $m1 in numeric ne (!=) at - line 16.
742Use of uninitialized value $g1 in subtraction (-) at - line 17.
743Use of uninitialized value $m1 in subtraction (-) at - line 17.
744Use of uninitialized value $g1 in exponentiation (**) at - line 18.
745Use of uninitialized value $m1 in exponentiation (**) at - line 18.
746Use of uninitialized value $g1 in addition (+) at - line 19.
747Use of uninitialized value $m1 in addition (+) at - line 19.
748Use of uninitialized value $g1 in subtraction (-) at - line 20.
749Use of uninitialized value $m1 in subtraction (-) at - line 20.
750########
751use warnings 'uninitialized';
752sub TIESCALAR{bless[]}
753sub FETCH { undef }
754
755tie my $m1, "";
756my $v;
757$v = $m1 + $m1;
758$v = $m1 - $m1;
759no warnings;
760$v = $m1 + $m1;
761$v = $m1 - $m1;
762EXPECT
763Use of uninitialized value $m1 in addition (+) at - line 7.
764Use of uninitialized value $m1 in addition (+) at - line 7.
765Use of uninitialized value $m1 in subtraction (-) at - line 8.
766Use of uninitialized value $m1 in subtraction (-) at - line 8.
767########
768use warnings 'uninitialized';
769my ($m1, $v);
770our ($g1);
771
772$v = *global1{$m1};
773$v = prototype $g1;
774$v = bless [], $g1;
775$v = `$m1`;
776
777$v = $m1 . $g1;
778EXPECT
779Use of uninitialized value $m1 in glob elem at - line 5.
780Use of uninitialized value $g1 in subroutine prototype at - line 6.
781Use of uninitialized value $g1 in bless at - line 7.
782Use of uninitialized value $m1 in quoted execution (``, qx) at - line 8.
783Use of uninitialized value $m1 in concatenation (.) or string at - line 10.
784Use of uninitialized value $g1 in concatenation (.) or string at - line 10.
785########
786use warnings 'uninitialized';
787my ($m1);
788our ($g1, $g2);
789
790/y/;
791/$m1/;
792/$g1/;
793
794s/y/z/;		undef $_;
795s/$m1/z/;	undef $_;
796s//$g1/;	undef $_;
797s/$m1/$g1/;	undef $_;
798tr/x/y/;	undef $_;
799tr/x/y/r;	undef $_;
800
801$g2 =~ /y/;
802$g2 =~ /$m1/;
803$g2 =~ /$g1/;
804$g2 =~ s/y/z/;		undef $g2;
805$g2 =~ s/$m1/z/;	undef $g2;
806$g2 =~ s//$g1/;		undef $g2;
807$g2 =~ s/$m1/$g1/;	undef $g2;
808$g2 =~ tr/x/y/;		undef $g2; # XXX can't extract var name yet
809$g2 =~ tr/x/y/r;	undef $g2; # XXX can't extract var name yet
810
811my $foo = "abc";
812$foo =~ /$m1/;
813$foo =~ /$g1/;
814$foo =~ s/y/z/;
815$foo =~ s/$m1/z/;
816$foo =~ s//$g1/;
817$foo =~ s/$m1/$g1/;
818$foo =~ s/./$m1/e;
819undef $g1;
820$m1 = '$g1';
821$foo =~ s//$m1/ee;
822undef $m1;
823$m1 =~ tr/x/y/;		undef $m1;
824$m1 =~ tr/x/y/r;
825EXPECT
826Use of uninitialized value $_ in pattern match (m//) at - line 5.
827Use of uninitialized value $m1 in regexp compilation at - line 6.
828Use of uninitialized value $_ in pattern match (m//) at - line 6.
829Use of uninitialized value $g1 in regexp compilation at - line 7.
830Use of uninitialized value $_ in pattern match (m//) at - line 7.
831Use of uninitialized value $_ in substitution (s///) at - line 9.
832Use of uninitialized value $m1 in regexp compilation at - line 10.
833Use of uninitialized value $_ in substitution (s///) at - line 10.
834Use of uninitialized value $_ in substitution (s///) at - line 10.
835Use of uninitialized value $_ in substitution (s///) at - line 11.
836Use of uninitialized value $_ in substitution (s///) at - line 11.
837Use of uninitialized value $g1 in substitution iterator at - line 11.
838Use of uninitialized value $m1 in regexp compilation at - line 12.
839Use of uninitialized value $_ in substitution (s///) at - line 12.
840Use of uninitialized value $_ in substitution (s///) at - line 12.
841Use of uninitialized value $g1 in substitution iterator at - line 12.
842Use of uninitialized value $_ in transliteration (tr///) at - line 13.
843Use of uninitialized value $_ in transliteration (tr///) at - line 14.
844Use of uninitialized value $g2 in pattern match (m//) at - line 16.
845Use of uninitialized value $m1 in regexp compilation at - line 17.
846Use of uninitialized value $g2 in pattern match (m//) at - line 17.
847Use of uninitialized value $g1 in regexp compilation at - line 18.
848Use of uninitialized value $g2 in pattern match (m//) at - line 18.
849Use of uninitialized value $g2 in substitution (s///) at - line 19.
850Use of uninitialized value $m1 in regexp compilation at - line 20.
851Use of uninitialized value $g2 in substitution (s///) at - line 20.
852Use of uninitialized value $g2 in substitution (s///) at - line 20.
853Use of uninitialized value $g2 in substitution (s///) at - line 21.
854Use of uninitialized value $g2 in substitution (s///) at - line 21.
855Use of uninitialized value $g1 in substitution iterator at - line 21.
856Use of uninitialized value $m1 in regexp compilation at - line 22.
857Use of uninitialized value $g2 in substitution (s///) at - line 22.
858Use of uninitialized value $g2 in substitution (s///) at - line 22.
859Use of uninitialized value $g1 in substitution iterator at - line 22.
860Use of uninitialized value in transliteration (tr///) at - line 23.
861Use of uninitialized value in transliteration (tr///) at - line 24.
862Use of uninitialized value $m1 in regexp compilation at - line 27.
863Use of uninitialized value $g1 in regexp compilation at - line 28.
864Use of uninitialized value $m1 in regexp compilation at - line 30.
865Use of uninitialized value $g1 in substitution iterator at - line 31.
866Use of uninitialized value $m1 in regexp compilation at - line 32.
867Use of uninitialized value $g1 in substitution iterator at - line 32.
868Use of uninitialized value $m1 in substitution (s///) at - line 33.
869Use of uninitialized value in substitution iterator at - line 36.
870Use of uninitialized value $m1 in transliteration (tr///) at - line 38.
871Use of uninitialized value $m1 in transliteration (tr///) at - line 39.
872########
873use warnings 'uninitialized';
874my ($m1);
875
876{ my $foo = "abc"; (substr($foo,0,0)) = ($m1) }
877EXPECT
878Use of uninitialized value $m1 in list assignment at - line 4.
879########
880use warnings 'uninitialized';
881our ($g1);
882
883study;
884study $g1;
885EXPECT
886Use of uninitialized value $_ in study at - line 4.
887Use of uninitialized value $g1 in study at - line 5.
888########
889use warnings 'uninitialized';
890my ($m1);
891
892pos()=0;
893pos($m1)=0;
894EXPECT
895Use of uninitialized value $_ in scalar assignment at - line 4.
896Use of uninitialized value $m1 in scalar assignment at - line 5.
897########
898use warnings 'uninitialized';
899my ($m1);
900our ($g1);
901
902$v = pos($m1) + 1;
903$v = pos($g1) + 1;
904$m1 = 0;
905$g1 = "";
906$v = pos($m1) + 1;
907$v = pos($g1) + 1;
908EXPECT
909Use of uninitialized value in addition (+) at - line 5.
910Use of uninitialized value in addition (+) at - line 6.
911Use of uninitialized value in addition (+) at - line 9.
912Use of uninitialized value in addition (+) at - line 10.
913########
914use warnings 'uninitialized';
915my ($m1);
916
917{ my $x = "a" x $m1 }		# NB LHS of repeat does not warn
918{ my @x = ("a") x $m1 }
919EXPECT
920Use of uninitialized value $m1 in repeat (x) at - line 4.
921Use of uninitialized value $m1 in repeat (x) at - line 5.
922########
923use warnings 'uninitialized';
924my ($m1, $v);
925our ($g1);
926
927$v = "$m1";
928
929$v = $m1 lt $g1;
930$v = $m1 le $g1;
931$v = $m1 gt $g1;
932$v = $m1 ge $g1;
933$v = $m1 eq $g1;
934$v = $m1 ne $g1;
935$v = $m1 cmp $g1;
936EXPECT
937Use of uninitialized value $m1 in string at - line 5.
938Use of uninitialized value $m1 in string lt at - line 7.
939Use of uninitialized value $g1 in string lt at - line 7.
940Use of uninitialized value $m1 in string le at - line 8.
941Use of uninitialized value $g1 in string le at - line 8.
942Use of uninitialized value $m1 in string gt at - line 9.
943Use of uninitialized value $g1 in string gt at - line 9.
944Use of uninitialized value $m1 in string ge at - line 10.
945Use of uninitialized value $g1 in string ge at - line 10.
946Use of uninitialized value $m1 in string eq at - line 11.
947Use of uninitialized value $g1 in string eq at - line 11.
948Use of uninitialized value $m1 in string ne at - line 12.
949Use of uninitialized value $g1 in string ne at - line 12.
950Use of uninitialized value $m1 in string comparison (cmp) at - line 13.
951Use of uninitialized value $g1 in string comparison (cmp) at - line 13.
952########
953use warnings 'uninitialized';
954my ($m1, $v);
955our ($g1);
956
957$v = atan2($m1,$g1);
958$v = sin $m1;
959$v = cos $m1;
960$v = rand $m1;
961$v = srand $m1;
962$v = exp $m1;
963$v = eval {log $m1};
964$v = sqrt $m1;
965$v = hex $m1;
966$v = oct $m1;
967$v = oct;
968$v = length; # does not warn
969EXPECT
970Use of uninitialized value $g1 in atan2 at - line 5.
971Use of uninitialized value $m1 in atan2 at - line 5.
972Use of uninitialized value $m1 in sin at - line 6.
973Use of uninitialized value $m1 in cos at - line 7.
974Use of uninitialized value $m1 in rand at - line 8.
975Use of uninitialized value $m1 in srand at - line 9.
976Use of uninitialized value $m1 in exp at - line 10.
977Use of uninitialized value $m1 in log at - line 11.
978Use of uninitialized value $m1 in sqrt at - line 12.
979Use of uninitialized value $m1 in hex at - line 13.
980Use of uninitialized value $m1 in oct at - line 14.
981Use of uninitialized value $_ in oct at - line 15.
982########
983use warnings 'uninitialized';
984my ($m1, $v);
985our ($g1);
986
987$v = substr $m1, $g1;
988$v = substr $m1, $g1, $m2;
989$v = substr $m1, $g1, $m2, $g2;	undef $m1;
990substr($m1, $g1) = $g2;		undef $m1; # NB global2
991substr($m1, $g1, $m2) = $g2;	undef $m1; # isn't identified
992
993$v = eval {vec ($m1, $g1, $m2)};
994eval {vec ($m1, $g1, $m2) = $g2};	undef $m1; # ditto
995
996$v = index  $m1, $m2;
997$v = index  $m1, $m2, $g1;
998$v = rindex $m1, $m2;
999$v = rindex $m1, $m2, $g1;
1000EXPECT
1001Use of uninitialized value $g1 in substr at - line 5.
1002Use of uninitialized value $m1 in substr at - line 5.
1003Use of uninitialized value $m2 in substr at - line 6.
1004Use of uninitialized value $g1 in substr at - line 6.
1005Use of uninitialized value $m1 in substr at - line 6.
1006Use of uninitialized value $m2 in substr at - line 7.
1007Use of uninitialized value $g1 in substr at - line 7.
1008Use of uninitialized value $g2 in substr at - line 7.
1009Use of uninitialized value $m1 in substr at - line 7.
1010Use of uninitialized value $g1 in substr at - line 8.
1011Use of uninitialized value $g2 in substr at - line 8.
1012Use of uninitialized value $m1 in substr at - line 8.
1013Use of uninitialized value $m2 in substr at - line 9.
1014Use of uninitialized value $g1 in substr at - line 9.
1015Use of uninitialized value $g2 in substr at - line 9.
1016Use of uninitialized value $m1 in substr at - line 9.
1017Use of uninitialized value $m2 in vec at - line 11.
1018Use of uninitialized value $g1 in vec at - line 11.
1019Use of uninitialized value $m1 in vec at - line 11.
1020Use of uninitialized value $m2 in vec at - line 12.
1021Use of uninitialized value $g1 in vec at - line 12.
1022Use of uninitialized value $m1 in index at - line 14.
1023Use of uninitialized value $m2 in index at - line 14.
1024Use of uninitialized value $g1 in index at - line 15.
1025Use of uninitialized value $m1 in index at - line 15.
1026Use of uninitialized value $m2 in index at - line 15.
1027Use of uninitialized value $m1 in rindex at - line 16.
1028Use of uninitialized value $m2 in rindex at - line 16.
1029Use of uninitialized value $g1 in rindex at - line 17.
1030Use of uninitialized value $m1 in rindex at - line 17.
1031Use of uninitialized value $m2 in rindex at - line 17.
1032########
1033use warnings 'uninitialized';
1034my ($m1, $v);
1035our ($g1);
1036
1037$v = sprintf $m1;
1038$v = sprintf '%d%d%d%d', $m1, $m2, $g1, $g2;
1039my $m3; eval {formline $m3 };
1040formline '@<<@<<@<<@<<', $m1, $m2, $g1, $g2;
1041EXPECT
1042Use of uninitialized value $m1 in sprintf at - line 5.
1043Use of uninitialized value $m1 in sprintf at - line 6.
1044Use of uninitialized value $m2 in sprintf at - line 6.
1045Use of uninitialized value $g1 in sprintf at - line 6.
1046Use of uninitialized value $g2 in sprintf at - line 6.
1047Use of uninitialized value $m3 in formline at - line 7.
1048Use of uninitialized value $m1 in formline at - line 8.
1049Use of uninitialized value $m2 in formline at - line 8.
1050Use of uninitialized value $g1 in formline at - line 8.
1051Use of uninitialized value $g2 in formline at - line 8.
1052########
1053# SKIP ? !$Config{d_crypt}
1054use warnings 'uninitialized';
1055my ($m1, $v);
1056our ($g1);
1057
1058$v = crypt $m1, $g1;
1059
1060$v = ord;
1061$v = ord $m1;
1062$v = chr;
1063$v = chr $m1;
1064
1065$v = ucfirst;
1066$v = ucfirst $m1;
1067$v = lcfirst;
1068$v = lcfirst $m1;
1069$v = uc;
1070$v = uc $m1;
1071$v = lc;
1072$v = lc $m1;
1073
1074$v = quotemeta;
1075$v = quotemeta $m1;
1076EXPECT
1077Use of uninitialized value $m1 in crypt at - line 5.
1078Use of uninitialized value $g1 in crypt at - line 5.
1079Use of uninitialized value $_ in ord at - line 7.
1080Use of uninitialized value $m1 in ord at - line 8.
1081Use of uninitialized value $_ in chr at - line 9.
1082Use of uninitialized value $m1 in chr at - line 10.
1083Use of uninitialized value $_ in ucfirst at - line 12.
1084Use of uninitialized value $m1 in ucfirst at - line 13.
1085Use of uninitialized value $_ in lcfirst at - line 14.
1086Use of uninitialized value $m1 in lcfirst at - line 15.
1087Use of uninitialized value $_ in uc at - line 16.
1088Use of uninitialized value $m1 in uc at - line 17.
1089Use of uninitialized value $_ in lc at - line 18.
1090Use of uninitialized value $m1 in lc at - line 19.
1091Use of uninitialized value $_ in quotemeta at - line 21.
1092Use of uninitialized value $m1 in quotemeta at - line 22.
1093########
1094use warnings 'uninitialized';
1095my ($m1, $v1, $v2, $v3, $v4);
1096our ($g1);
1097
1098($v1,$v2,$v3,$v4) = split;
1099($v1,$v2,$v3,$v4) = split $m1;
1100($v1,$v2,$v3,$v4) = split $m1, $m2;
1101($v1,$v2,$v3,$v4) = split $m1, $m2, $g1;
1102
1103$v1 = join $m1;
1104$v2 = join $m1, $m2;
1105$v3 = join $m1, $m2, $m3;
1106EXPECT
1107Use of uninitialized value $_ in split at - line 5.
1108Use of uninitialized value $m1 in regexp compilation at - line 6.
1109Use of uninitialized value $_ in split at - line 6.
1110Use of uninitialized value $m1 in regexp compilation at - line 7.
1111Use of uninitialized value $m2 in split at - line 7.
1112Use of uninitialized value $m1 in regexp compilation at - line 8.
1113Use of uninitialized value $g1 in split at - line 8.
1114Use of uninitialized value $m2 in split at - line 8.
1115Use of uninitialized value $m1 in join or string at - line 10.
1116Use of uninitialized value $m2 in join or string at - line 11.
1117Use of uninitialized value $m1 in join or string at - line 12.
1118Use of uninitialized value $m2 in join or string at - line 12.
1119Use of uninitialized value $m3 in join or string at - line 12.
1120########
1121use warnings 'uninitialized';
1122my ($m1, $m2, @ma, $v);
1123
1124our @foo1=(1,undef); chomp @foo1;
1125my  @foo2=(1,undef); chomp @foo2;
1126our @foo3=(1,undef); chop  @foo3;
1127my  @foo4=(1,undef); chop  @foo4;
1128our @foo5=(1,undef); $v = sprintf "%s%s",@foo5;
1129my  @foo6=(1,undef); $v = sprintf "%s%s",@foo6;
1130our %foo7=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo7;
1131my  %foo8=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo8;
1132our @foo9 =(1,undef); $v = sprintf "%s%s%s%s",$m1,@foo9, $ma[2];
1133my  @foo10=(1,undef); $v = sprintf "%s%s%s%s",$m2,@foo10,$ma[2];
1134our %foo11=('foo'=>'bar','baz'=>undef); $v = join '', %foo11;
1135my  %foo12=('foo'=>'bar','baz'=>undef); $v = join '', %foo12;
1136our %foo13=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo13;
1137my  %foo14=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo14;
1138EXPECT
1139Use of uninitialized value $foo1[1] in chomp at - line 4.
1140Use of uninitialized value $foo2[1] in chomp at - line 5.
1141Use of uninitialized value $foo3[1] in chop at - line 6.
1142Use of uninitialized value $foo4[1] in chop at - line 7.
1143Use of uninitialized value $foo5[1] in sprintf at - line 8.
1144Use of uninitialized value $foo6[1] in sprintf at - line 9.
1145Use of uninitialized value $foo7{"baz"} in sprintf at - line 10.
1146Use of uninitialized value $foo8{"baz"} in sprintf at - line 11.
1147Use of uninitialized value $m1 in sprintf at - line 12.
1148Use of uninitialized value $foo9[1] in sprintf at - line 12.
1149Use of uninitialized value in sprintf at - line 12.
1150Use of uninitialized value $m2 in sprintf at - line 13.
1151Use of uninitialized value $foo10[1] in sprintf at - line 13.
1152Use of uninitialized value in sprintf at - line 13.
1153Use of uninitialized value $foo11{"baz"} in join or string at - line 14.
1154Use of uninitialized value $foo12{"baz"} in join or string at - line 15.
1155Use of uninitialized value within %foo13 in join or string at - line 16.
1156Use of uninitialized value within %foo14 in join or string at - line 17.
1157########
1158use warnings 'uninitialized';
1159my ($v);
1160
1161undef $^A; $v = $^A + ${^FOO}; # should output '^A' not chr(1)
1162*GLOB1 = *GLOB2;
1163$v = $GLOB1 + 1;
1164$v = $GLOB2 + 1;
1165EXPECT
1166Use of uninitialized value $^FOO in addition (+) at - line 4.
1167Use of uninitialized value $^A in addition (+) at - line 4.
1168Use of uninitialized value $GLOB1 in addition (+) at - line 6.
1169Use of uninitialized value $GLOB2 in addition (+) at - line 7.
1170########
1171use warnings 'uninitialized';
1172my ($v);
1173
1174# check hash key is sanitised
1175my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef);
1176$v = join '', %h;
1177EXPECT
1178Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6.
1179########
1180use warnings 'uninitialized';
1181my ($m1, $v);
1182our ($g1);
1183
1184$v = eval { \&$m1 };
1185$v = eval { \&$g1 };
1186
1187my @a;
1188@a = splice @a, $m1, $g1;
1189$v = 1 + splice @a, $m1, $g1;
1190
1191my $x = bless [], 'Z';
1192eval { $x->$m1() };
1193
1194eval { &$m1() };
1195eval { &$g1() };
1196
1197warn $m1,$g1,"foo";
1198
1199eval { die $m1, $g1 };
1200
1201reset $m1;
1202reset $g1;
1203EXPECT
1204Use of uninitialized value $m1 in subroutine dereference at - line 5.
1205Use of uninitialized value $g1 in subroutine dereference at - line 6.
1206Use of uninitialized value $m1 in splice at - line 9.
1207Use of uninitialized value $g1 in splice at - line 9.
1208Use of uninitialized value $m1 in splice at - line 10.
1209Use of uninitialized value $g1 in splice at - line 10.
1210Use of uninitialized value in addition (+) at - line 10.
1211Use of uninitialized value $m1 in method lookup at - line 13.
1212Use of uninitialized value $m1 in warn at - line 18.
1213Use of uninitialized value $g1 in warn at - line 18.
1214foo at - line 18.
1215Use of uninitialized value $m1 in die at - line 20.
1216Use of uninitialized value $g1 in die at - line 20.
1217Use of uninitialized value $m1 in symbol reset at - line 22.
1218Use of uninitialized value $g1 in symbol reset at - line 23.
1219########
1220use warnings 'uninitialized';
1221my ($m1);
1222our ($g1);
1223
1224open FOO;		# accesses $FOO
1225my $foo = 'FO';
1226open($foo."O");	# accesses $FOO
1227open my $x;		# accesses ${*$x}
1228open $foobar;	# accesses ${*$foobar}
1229my $y;
1230open $y, $m1;
1231eval { open $y, $m1, $g1 };
1232open $y, '<', $g1;
1233
1234sysopen $y, $m1, $m2;
1235sysopen $y, $m1, $g1, $m2;
1236
1237my $old = umask;
1238umask $m1;
1239umask $g1;
1240umask $old;
1241
1242binmode STDIN, $m1;
1243EXPECT
1244Use of uninitialized value $FOO in open at - line 5.
1245Use of uninitialized value in open at - line 7.
1246Use of uninitialized value in open at - line 8.
1247Use of uninitialized value in open at - line 9.
1248Use of uninitialized value $m1 in open at - line 11.
1249Use of uninitialized value $m1 in open at - line 12.
1250Use of uninitialized value $g1 in open at - line 13.
1251Use of uninitialized value $m2 in sysopen at - line 15.
1252Use of uninitialized value $m1 in sysopen at - line 15.
1253Use of uninitialized value $m2 in sysopen at - line 16.
1254Use of uninitialized value $g1 in sysopen at - line 16.
1255Use of uninitialized value $m1 in sysopen at - line 16.
1256Use of uninitialized value $m1 in umask at - line 19.
1257Use of uninitialized value $g1 in umask at - line 20.
1258Use of uninitialized value $m1 in binmode at - line 23.
1259########
1260use warnings 'uninitialized';
1261my ($m1);
1262our ($g1);
1263
1264eval { my $x; tie $x, $m1 };
1265
1266eval { my $x; read    $m1, $x, $g1 };
1267eval { my $x; read    $m1, $x, $g1, $g2 };
1268eval { my $x; sysread $m1, $x, $g1 };
1269eval { my $x; sysread $m1, $x, $g1, $g2 };
1270EXPECT
1271Use of uninitialized value $m1 in tie at - line 5.
1272Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1273Use of uninitialized value $g1 in read at - line 7.
1274Use of uninitialized value $m1 in ref-to-glob cast at - line 8.
1275Use of uninitialized value $g1 in read at - line 8.
1276Use of uninitialized value $g2 in read at - line 8.
1277Use of uninitialized value $m1 in ref-to-glob cast at - line 9.
1278Use of uninitialized value $g1 in sysread at - line 9.
1279Use of uninitialized value $m1 in ref-to-glob cast at - line 10.
1280Use of uninitialized value $g1 in sysread at - line 10.
1281Use of uninitialized value $g2 in sysread at - line 10.
1282########
1283use warnings 'uninitialized';
1284my ($m1);
1285our ($g1, @ga);
1286
1287printf $m1;
1288printf STDERR "%d%d%d%d\n", $m1, $m2, $g1, $g2;
1289printf $ga[1000];
1290printf STDERR "FOO1:%s\n", $ga[1000];
1291printf STDERR "FOO2:%s%s%s%s\n", $m1, $g1, $ga[1],$m2;
1292printf STDERR "FOO3:%s%s%s\n", "X", $ga[1],"Y";
1293EXPECT
1294Use of uninitialized value $m1 in printf at - line 5.
1295Use of uninitialized value $m1 in printf at - line 6.
1296Use of uninitialized value $m2 in printf at - line 6.
1297Use of uninitialized value $g1 in printf at - line 6.
1298Use of uninitialized value $g2 in printf at - line 6.
12990000
1300Use of uninitialized value in printf at - line 7.
1301Use of uninitialized value in printf at - line 8.
1302FOO1:
1303Use of uninitialized value $m1 in printf at - line 9.
1304Use of uninitialized value $g1 in printf at - line 9.
1305Use of uninitialized value in printf at - line 9.
1306Use of uninitialized value $m2 in printf at - line 9.
1307FOO2:
1308Use of uninitialized value in printf at - line 10.
1309FOO3:XY
1310########
1311use warnings 'uninitialized';
1312my ($m1);
1313our ($g1);
1314
1315eval { my $x; seek    $x,$m1, $g1 };
1316eval { my $x; sysseek $x,$m1, $g1 };
1317eval { syswrite $m1, $g1 }; # logic changed - now won't try $g1 if $m1 is bad
1318# eval { syswrite STDERR, $m1 };        # XXX under utf8, can give
1319# eval { syswrite STDERR, $m1, $g1 };   # XXX different warnings
1320# eval { syswrite STDERR, $m1, $g1, $m2 };
1321eval { my $x; socket $x, $m1, $g1, $m2 };
1322eval { my ($x,$y); socketpair $x, $y, $m1, $g1, $m2 };
1323EXPECT
1324Use of uninitialized value $x in ref-to-glob cast at - line 5.
1325Use of uninitialized value $g1 in seek at - line 5.
1326Use of uninitialized value $m1 in seek at - line 5.
1327Use of uninitialized value $x in ref-to-glob cast at - line 6.
1328Use of uninitialized value $g1 in sysseek at - line 6.
1329Use of uninitialized value $m1 in sysseek at - line 6.
1330Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1331Use of uninitialized value $m2 in socket at - line 11.
1332Use of uninitialized value $g1 in socket at - line 11.
1333Use of uninitialized value $m1 in socket at - line 11.
1334Use of uninitialized value $m2 in socketpair at - line 12.
1335Use of uninitialized value $g1 in socketpair at - line 12.
1336Use of uninitialized value $m1 in socketpair at - line 12.
1337########
1338use Config;
1339BEGIN {
1340  if ( !$Config{d_flock} &&
1341       !$Config{d_fcntl_can_lock} &&
1342       !$Config{d_lockf} ) {
1343    print <<EOM ;
1344SKIPPED
1345# flock not present
1346EOM
1347    exit ;
1348  }
1349}
1350use warnings 'uninitialized';
1351our ($g1);
1352
1353eval { my $x; flock $x, $g1 };
1354EXPECT
1355Use of uninitialized value $x in ref-to-glob cast at - line 16.
1356Use of uninitialized value $g1 in flock at - line 16.
1357########
1358use warnings 'uninitialized';
1359my ($m1, $v);
1360our ($g1);
1361
1362stat;
1363lstat;
1364stat $m1;
1365lstat $g1;
1366
1367$v = -R $m1;
1368$v = -W $m1;
1369$v = -X $m1;
1370$v = -r $m1;
1371$v = -w $m1;
1372$v = -x $m1;
1373$v = -e $m1;
1374$v = -o $m1;
1375$v = -O $m1;
1376$v = -z $m1;
1377$v = -s $m1;
1378$v = -M $m1;
1379$v = -A $m1;
1380$v = -C $m1;
1381$v = -S $m1;
1382$v = -c $m1;
1383$v = -b $m1;
1384$v = -f $m1;
1385$v = -d $m1;
1386$v = -p $m1;
1387$v = -l $m1;
1388$v = -u $m1;
1389$v = -g $m1;
1390# $v = -k $m1; # XXX this is a no-op under win32
1391$v = -t $m1;
1392$v = -T $m1;
1393$v = -B $m1;
1394EXPECT
1395Use of uninitialized value $_ in stat at - line 5.
1396Use of uninitialized value $_ in lstat at - line 6.
1397Use of uninitialized value $m1 in stat at - line 7.
1398Use of uninitialized value $g1 in lstat at - line 8.
1399Use of uninitialized value $m1 in -R at - line 10.
1400Use of uninitialized value $m1 in -W at - line 11.
1401Use of uninitialized value $m1 in -X at - line 12.
1402Use of uninitialized value $m1 in -r at - line 13.
1403Use of uninitialized value $m1 in -w at - line 14.
1404Use of uninitialized value $m1 in -x at - line 15.
1405Use of uninitialized value $m1 in -e at - line 16.
1406Use of uninitialized value $m1 in -o at - line 17.
1407Use of uninitialized value $m1 in -O at - line 18.
1408Use of uninitialized value $m1 in -z at - line 19.
1409Use of uninitialized value $m1 in -s at - line 20.
1410Use of uninitialized value $m1 in -M at - line 21.
1411Use of uninitialized value $m1 in -A at - line 22.
1412Use of uninitialized value $m1 in -C at - line 23.
1413Use of uninitialized value $m1 in -S at - line 24.
1414Use of uninitialized value $m1 in -c at - line 25.
1415Use of uninitialized value $m1 in -b at - line 26.
1416Use of uninitialized value $m1 in -f at - line 27.
1417Use of uninitialized value $m1 in -d at - line 28.
1418Use of uninitialized value $m1 in -p at - line 29.
1419Use of uninitialized value $m1 in -l at - line 30.
1420Use of uninitialized value $m1 in -u at - line 31.
1421Use of uninitialized value $m1 in -g at - line 32.
1422Use of uninitialized value $m1 in -t at - line 34.
1423Use of uninitialized value $m1 in -T at - line 35.
1424Use of uninitialized value $m1 in -B at - line 36.
1425########
1426use warnings 'uninitialized';
1427my ($m1, $v);
1428our ($g1);
1429
1430$v = localtime $m1;
1431$v = gmtime $g1;
1432EXPECT
1433Use of uninitialized value $m1 in localtime at - line 5.
1434Use of uninitialized value $g1 in gmtime at - line 6.
1435########
1436use warnings 'uninitialized';
1437my ($m1, $m2, $v);
1438
1439$v = eval;
1440$v = eval $m1;
1441$m2 = q($m1); $v = 1 + eval $m2;
1442EXPECT
1443Use of uninitialized value $_ in eval "string" at - line 4.
1444Use of uninitialized value $m1 in eval "string" at - line 5.
1445Use of uninitialized value in addition (+) at - line 6.
1446########
1447use warnings 'uninitialized';
1448my ($m1);
1449
1450exit $m1;
1451EXPECT
1452Use of uninitialized value $m1 in exit at - line 4.
1453########
1454use warnings 'uninitialized';
1455my $undef;
1456
1457if ($undef == 3) {
1458} elsif ($undef == 0) {
1459}
1460EXPECT
1461Use of uninitialized value $undef in numeric eq (==) at - line 4.
1462Use of uninitialized value $undef in numeric eq (==) at - line 5.
1463########
1464# TODO long standing bug - conditions of while loops
1465use warnings;
1466
1467my $c;
1468my $d = 1;
1469while ($c == 0 && $d) {
1470  # a
1471  # few
1472  # blank
1473  # lines
1474  undef $d;
1475}
1476EXPECT
1477Use of uninitialized value $c in numeric eq (==) at - line 5.
1478Use of uninitialized value $c in numeric eq (==) at - line 5.
1479########
1480# TODO long standing bug - conditions of until loops
1481use warnings;
1482
1483my $c;
1484my $d;
1485until ($c == 1) {
1486  # a
1487  # few
1488  # blank
1489  # lines
1490  $c = 1 if ++$d == 2;
1491}
1492EXPECT
1493Use of uninitialized value $c in numeric eq (==) at - line 5.
1494Use of uninitialized value $c in numeric eq (==) at - line 5.
1495########
1496# TODO long standing bug - conditions of for loops
1497use warnings;
1498
1499my $c;
1500my $d;
1501for ($d = 1; $c == 0 && $d; ) {
1502  # a
1503  # few
1504  # blank
1505  # lines
1506  undef $d;
1507}
1508
1509my $e;
1510for ($d = 2; $d > 0; $e = !($c == 0)) {
1511  # a
1512  # few
1513  # blank
1514  # lines
1515  --$d;
1516}
1517EXPECT
1518Use of uninitialized value $c in numeric eq (==) at - line 5.
1519Use of uninitialized value $c in numeric eq (==) at - line 5.
1520Use of uninitialized value $c in numeric eq (==) at - line 14.
1521Use of uninitialized value $c in numeric eq (==) at - line 14.
1522########
1523# TODO long standing bug - more general variant of the above problem
1524use warnings;
1525my $undef;
1526
1527my $a = $undef + 1;
1528my $b
1529  = $undef
1530  + 1;
1531EXPECT
1532Use of uninitialized value $undef in addition (+) at - line 4.
1533Use of uninitialized value $undef in addition (+) at - line 7.
1534########
1535use warnings 'uninitialized';
1536my ($r1, $r2);
1537$_ = undef;
1538$v = reverse;
1539$v = reverse $r1;
1540$v = reverse "abc", $r2, "def";
1541EXPECT
1542Use of uninitialized value in reverse at - line 4.
1543Use of uninitialized value $r1 in reverse at - line 5.
1544Use of uninitialized value $r2 in reverse at - line 6.
1545########
1546use warnings 'uninitialized';
1547#
1548# ops that can return undef for defined args
1549# split into separate tests to diagnose the cause of daily build smoke
1550#
1551# *** `` not tested: Windows produces an error on STDERR
1552# *** ditto qx()
1553# *** pipe() not tested
1554# *** ioctl not tested
1555# *** socket not tested
1556# *** socketpair not tested
1557# *** bind not tested
1558# *** connect not tested
1559# *** listen not tested
1560# *** shutdown not tested
1561# *** setsockopt not tested
1562# *** getpeername not tested
1563# *** readdir not tested
1564# *** telldir not tested
1565# *** seekdir not tested
1566# *** rewinddir not tested
1567# *** closedir not tested
1568# *** gmtime not tested
1569# *** alarm not tested
1570# *** semget not tested
1571# *** getlogin not tested
1572EXPECT
1573########
1574use warnings 'uninitialized';
1575if ($^O eq 'MSWin32') {
1576    print <<'EOM';
1577SKIPPED
1578# `` produces an error on STDERR on Win32
1579EOM
1580    exit;
1581}
1582my $nocmd  = '/no/such/command';
1583my $v;
1584$v = 1 + `$nocmd`;
1585EXPECT
1586Use of uninitialized value in addition (+) at - line 11.
1587########
1588use warnings 'uninitialized';
1589if ($^O eq 'MSWin32') {
1590    print <<'EOM';
1591SKIPPED
1592# qx produces an error on STDERR on Win32
1593EOM
1594    exit;
1595}
1596my $nocmd  = '/no/such/command';
1597my $v;
1598$v = 1 + qx($nocmd);
1599EXPECT
1600Use of uninitialized value in addition (+) at - line 11.
1601########
1602use warnings 'uninitialized';
1603my $nan = "NaN";
1604if ($nan == $nan) {
1605    print <<'EOM';
1606SKIPPED
1607# NaN not supported here.
1608EOM
1609    exit;
1610}
1611my $v;
1612$v = 1 + ($nan <=> 1);
1613EXPECT
1614Use of uninitialized value in addition (+) at - line 11.
1615########
1616use warnings 'uninitialized';
1617if ($^O eq 'MSWin32') {
1618    print <<'EOM';
1619SKIPPED
1620# -k produces no warning on Win32
1621EOM
1622    exit;
1623}
1624my $nofile = '/no/such/file';
1625my $v;
1626$v = 1 + -k $nofile;
1627EXPECT
1628Use of uninitialized value in addition (+) at - line 11.
1629########
1630use warnings 'uninitialized';
1631my $nofile = '/no/such/file';
1632my $v;
1633my $f = "";
1634$v = 1 + open($f, $nofile);
1635EXPECT
1636Use of uninitialized value in addition (+) at - line 5.
1637########
1638use warnings 'uninitialized';
1639my $nofile = '/no/such/file';
1640my $v;
1641$v = 1 + fileno($nofile);
1642EXPECT
1643Use of uninitialized value in addition (+) at - line 4.
1644########
1645use warnings 'uninitialized';
1646my $nofile = '/no/such/file';
1647my $v;
1648$v = 1 + binmode($nofile);
1649EXPECT
1650Use of uninitialized value in addition (+) at - line 4.
1651########
1652use warnings 'uninitialized';
1653my $nofile = '/no/such/file';
1654my $v;
1655$v = 1 + tied($nofile);
1656EXPECT
1657Use of uninitialized value in addition (+) at - line 4.
1658########
1659use warnings 'uninitialized';
1660my $nofile = '/no/such/file';
1661my $v;
1662$v = 1 + getc($nofile);
1663EXPECT
1664Use of uninitialized value in addition (+) at - line 4.
1665########
1666use warnings 'uninitialized';
1667my $nofile = '/no/such/file';
1668my $v;
1669$v = 1 + sysread($nofile, my $buf,1);
1670EXPECT
1671Use of uninitialized value in addition (+) at - line 4.
1672########
1673use warnings 'uninitialized';
1674my $nofile = '/no/such/file';
1675my $v;
1676$v = 1 + eval { send($nofile, $buf,0) };
1677EXPECT
1678Use of uninitialized value in addition (+) at - line 4.
1679########
1680use warnings 'uninitialized';
1681my $nofile = '/no/such/file';
1682my $v;
1683my $fh = "";
1684$v = 1 + eval { accept($fh, $nofile) };
1685EXPECT
1686Use of uninitialized value in addition (+) at - line 5.
1687########
1688use warnings 'uninitialized';
1689my $nofile = '/no/such/file';
1690my $v;
1691$v = 1 + (-r $nofile);
1692EXPECT
1693Use of uninitialized value in addition (+) at - line 4.
1694########
1695use warnings 'uninitialized';
1696my $nofile = '/no/such/file';
1697my $v;
1698$v = 1 + (-w $nofile);
1699EXPECT
1700Use of uninitialized value in addition (+) at - line 4.
1701########
1702use warnings 'uninitialized';
1703my $nofile = '/no/such/file';
1704my $v;
1705$v = 1 + (-x $nofile);
1706EXPECT
1707Use of uninitialized value in addition (+) at - line 4.
1708########
1709use warnings 'uninitialized';
1710my $nofile = '/no/such/file';
1711my $v;
1712$v = 1 + (-o $nofile);
1713EXPECT
1714Use of uninitialized value in addition (+) at - line 4.
1715########
1716use warnings 'uninitialized';
1717my $nofile = '/no/such/file';
1718my $v;
1719$v = 1 + (-R $nofile);
1720EXPECT
1721Use of uninitialized value in addition (+) at - line 4.
1722########
1723use warnings 'uninitialized';
1724my $nofile = '/no/such/file';
1725my $v;
1726$v = 1 + (-W $nofile);
1727EXPECT
1728Use of uninitialized value in addition (+) at - line 4.
1729########
1730use warnings 'uninitialized';
1731my $nofile = '/no/such/file';
1732my $v;
1733$v = 1 + (-X $nofile);
1734EXPECT
1735Use of uninitialized value in addition (+) at - line 4.
1736########
1737use warnings 'uninitialized';
1738my $nofile = '/no/such/file';
1739my $v;
1740$v = 1 + (-O $nofile);
1741EXPECT
1742Use of uninitialized value in addition (+) at - line 4.
1743########
1744use warnings 'uninitialized';
1745my $nofile = '/no/such/file';
1746my $v;
1747$v = 1 + (-e $nofile);
1748EXPECT
1749Use of uninitialized value in addition (+) at - line 4.
1750########
1751use warnings 'uninitialized';
1752my $nofile = '/no/such/file';
1753my $v;
1754$v = 1 + (-z $nofile);
1755EXPECT
1756Use of uninitialized value in addition (+) at - line 4.
1757########
1758use warnings 'uninitialized';
1759my $nofile = '/no/such/file';
1760my $v;
1761$v = 1 + (-s $nofile);
1762EXPECT
1763Use of uninitialized value in addition (+) at - line 4.
1764########
1765use warnings 'uninitialized';
1766my $nofile = '/no/such/file';
1767my $v;
1768$v = 1 + (-f $nofile);
1769EXPECT
1770Use of uninitialized value in addition (+) at - line 4.
1771########
1772use warnings 'uninitialized';
1773my $nofile = '/no/such/file';
1774my $v;
1775$v = 1 + (-d $nofile);
1776EXPECT
1777Use of uninitialized value in addition (+) at - line 4.
1778########
1779use warnings 'uninitialized';
1780my $nofile = '/no/such/file';
1781my $v;
1782$v = 1 + (-l $nofile);
1783EXPECT
1784Use of uninitialized value in addition (+) at - line 4.
1785########
1786use warnings 'uninitialized';
1787my $nofile = '/no/such/file';
1788my $v;
1789$v = 1 + (-p $nofile);
1790EXPECT
1791Use of uninitialized value in addition (+) at - line 4.
1792########
1793use warnings 'uninitialized';
1794my $nofile = '/no/such/file';
1795my $v;
1796$v = 1 + (-S $nofile);
1797EXPECT
1798Use of uninitialized value in addition (+) at - line 4.
1799########
1800use warnings 'uninitialized';
1801my $nofile = '/no/such/file';
1802my $v;
1803$v = 1 + (-b $nofile);
1804EXPECT
1805Use of uninitialized value in addition (+) at - line 4.
1806########
1807use warnings 'uninitialized';
1808my $nofile = '/no/such/file';
1809my $v;
1810$v = 1 + (-c $nofile);
1811EXPECT
1812Use of uninitialized value in addition (+) at - line 4.
1813########
1814use warnings 'uninitialized';
1815my $nofile = '/no/such/file';
1816my $v;
1817$v = 1 + (-t $nofile);
1818EXPECT
1819Use of uninitialized value in addition (+) at - line 4.
1820########
1821use warnings 'uninitialized';
1822my $nofile = '/no/such/file';
1823my $v;
1824$v = 1 + (-u $nofile);
1825EXPECT
1826Use of uninitialized value in addition (+) at - line 4.
1827########
1828use warnings 'uninitialized';
1829my $nofile = '/no/such/file';
1830my $v;
1831$v = 1 + (-g $nofile);
1832EXPECT
1833Use of uninitialized value in addition (+) at - line 4.
1834########
1835use warnings 'uninitialized';
1836my $nofile = '/no/such/file';
1837my $v;
1838$v = 1 + (-T $nofile);
1839EXPECT
1840Use of uninitialized value in addition (+) at - line 4.
1841########
1842use warnings 'uninitialized';
1843my $nofile = '/no/such/file';
1844my $v;
1845$v = 1 + (-B $nofile);
1846EXPECT
1847Use of uninitialized value in addition (+) at - line 4.
1848########
1849use warnings 'uninitialized';
1850my $nofile = '/no/such/file';
1851my $v;
1852$v = 1 + (-M $nofile);
1853EXPECT
1854Use of uninitialized value in addition (+) at - line 4.
1855########
1856use warnings 'uninitialized';
1857my $nofile = '/no/such/file';
1858my $v;
1859$v = 1 + (-A $nofile);
1860EXPECT
1861Use of uninitialized value in addition (+) at - line 4.
1862########
1863use warnings 'uninitialized';
1864my $nofile = '/no/such/file';
1865my $v;
1866$v = 1 + (-C $nofile);
1867EXPECT
1868Use of uninitialized value in addition (+) at - line 4.
1869########
1870use warnings 'uninitialized';
1871my $nofile = '/no/such/file';
1872my $v;
1873$v = 1 + eval { readlink $nofile };
1874EXPECT
1875Use of uninitialized value in addition (+) at - line 4.
1876########
1877use warnings 'uninitialized';
1878my $nofile = '/no/such/file';
1879my $v;
1880$v = 1 + opendir($f, $nofile);
1881EXPECT
1882Use of uninitialized value in addition (+) at - line 4.
1883########
1884use warnings 'uninitialized';
1885my $nofile = '/no/such/file';
1886my $v;
1887$v = 1 + undef;
1888EXPECT
1889Use of uninitialized value in addition (+) at - line 4.
1890########
1891use warnings 'uninitialized';
1892my $nofile = '/no/such/file';
1893my $v;
1894my $x = 1; $v = 1 + undef($x);
1895EXPECT
1896Use of uninitialized value in addition (+) at - line 4.
1897########
1898use warnings 'uninitialized';
1899my $v;
1900my $emptys = "";
1901$v = 1 + substr($emptys,2,1);
1902EXPECT
1903Use of uninitialized value in addition (+) at - line 4.
1904########
1905use warnings 'uninitialized';
1906my $v;
1907my @emptya;
1908$v = 1 + each @emptya;
1909EXPECT
1910Use of uninitialized value in addition (+) at - line 4.
1911########
1912use warnings 'uninitialized';
1913my $v;
1914my %emptyh;
1915$v = 1 + each %emptyh;
1916EXPECT
1917Use of uninitialized value in addition (+) at - line 4.
1918########
1919use warnings 'uninitialized';
1920my $v;
1921my @emptya;
1922$v = 1 + sort @emptya;
1923EXPECT
1924Use of uninitialized value in addition (+) at - line 4.
1925########
1926use warnings 'uninitialized';
1927my $v;
1928my $zero = 0; $v = 1 + caller($zero);
1929EXPECT
1930Use of uninitialized value in addition (+) at - line 3.
1931########
1932use warnings 'uninitialized';
1933my $nofile = '/no/such/file';
1934my $v;
1935$v = 1 + do $nofile;
1936EXPECT
1937Use of uninitialized value in addition (+) at - line 4.
1938########
1939use warnings 'uninitialized';
1940my $v;
1941my $fn = sub {};
1942$v = 1 + prototype $fn;
1943EXPECT
1944Use of uninitialized value in addition (+) at - line 4.
1945########
1946use warnings 'uninitialized'; no warnings 'experimental::smartmatch';
1947my $v;
1948my $fn = sub {};
1949$v = 1 + (1 ~~ $fn);
1950EXPECT
1951Use of uninitialized value in addition (+) at - line 4.
1952########
1953use warnings 'uninitialized';
1954my $v;
1955my $f = "";
1956$v = 1 + (print STDIN $f); # print to STDIN returns undef
1957EXPECT
1958Use of uninitialized value in addition (+) at - line 4.
1959########
1960use warnings 'uninitialized';
1961my $v;
1962my $f = "";
1963$v = 1 + (printf STDIN "%s", $f);
1964EXPECT
1965Use of uninitialized value in addition (+) at - line 4.
1966########
1967use warnings 'uninitialized';
1968my $v;
1969my $f = "";
1970{ use feature 'say'; $v = 1 + (say STDIN "%s", $f); }
1971EXPECT
1972Use of uninitialized value in addition (+) at - line 4.
1973########
1974use warnings 'uninitialized';
1975my $v;
1976my $f = "";
1977$v = 1 + (unpack("",$f));
1978EXPECT
1979Use of uninitialized value in addition (+) at - line 4.
1980########
1981use warnings 'uninitialized';
1982my $nofile = '/no/such/file';
1983my $v;
1984my $f = "";
1985$v = 1 + sysopen($f, $nofile, 0);
1986EXPECT
1987Use of uninitialized value in addition (+) at - line 5.
1988########
1989use warnings 'uninitialized';
1990my $v;
1991{ my $x = -1; $v = 1 + sysseek(DATA, $x, 0); }
1992__END__
1993EXPECT
1994Use of uninitialized value in addition (+) at - line 3.
1995########
1996use warnings 'uninitialized';
1997delete $::{'Foo::'};
1998my $moo = $Foo::BAR + 42;
1999__END__
2000EXPECT
2001Use of uninitialized value in addition (+) at - line 3.
2002########
2003use warnings 'uninitialized';
2004use constant {u=>undef, v=>undef};
2005sub foo () {u}
2006sub foo () {v}
2007EXPECT
2008########
2009# [perl #72090]
2010use warnings 'uninitialized';
2011$a = @$a > 0;
2012EXPECT
2013Use of uninitialized value $a in array dereference at - line 3.
2014Use of uninitialized value in numeric gt (>) at - line 3.
2015########
2016# [perl #103766]
2017use warnings 'uninitialized';
2018"@{[ $x ]}";
2019EXPECT
2020Use of uninitialized value in join or string at - line 3.
2021########
2022# inside formats
2023use warnings 'uninitialized';
2024my $x;
2025format =
2026@
2027"$x";
2028.
2029write;
2030EXPECT
2031Use of uninitialized value $x in string at - line 6.
2032########
2033# NAME off-by-one error in hash bucket walk in key detection logic
2034use warnings 'uninitialized';
2035
2036for ( 0 .. 20 ) { # we assume that this means we test keys for every bucket
2037    my %h= ( $_ => undef );
2038    my $s= sprintf "%s", $h{$_};
2039}
2040EXPECT
2041Use of uninitialized value $h{"0"} in sprintf at - line 5.
2042Use of uninitialized value $h{"1"} in sprintf at - line 5.
2043Use of uninitialized value $h{"2"} in sprintf at - line 5.
2044Use of uninitialized value $h{"3"} in sprintf at - line 5.
2045Use of uninitialized value $h{"4"} in sprintf at - line 5.
2046Use of uninitialized value $h{"5"} in sprintf at - line 5.
2047Use of uninitialized value $h{"6"} in sprintf at - line 5.
2048Use of uninitialized value $h{"7"} in sprintf at - line 5.
2049Use of uninitialized value $h{"8"} in sprintf at - line 5.
2050Use of uninitialized value $h{"9"} in sprintf at - line 5.
2051Use of uninitialized value $h{"10"} in sprintf at - line 5.
2052Use of uninitialized value $h{"11"} in sprintf at - line 5.
2053Use of uninitialized value $h{"12"} in sprintf at - line 5.
2054Use of uninitialized value $h{"13"} in sprintf at - line 5.
2055Use of uninitialized value $h{"14"} in sprintf at - line 5.
2056Use of uninitialized value $h{"15"} in sprintf at - line 5.
2057Use of uninitialized value $h{"16"} in sprintf at - line 5.
2058Use of uninitialized value $h{"17"} in sprintf at - line 5.
2059Use of uninitialized value $h{"18"} in sprintf at - line 5.
2060Use of uninitialized value $h{"19"} in sprintf at - line 5.
2061Use of uninitialized value $h{"20"} in sprintf at - line 5.
2062########
2063# NAME SvPOK && SvLEN==0 should not produce uninit warning
2064use warnings 'uninitialized';
2065
2066$v = int(${qr||}); # sv_2iv on a regexp
2067$v = 1.1 *  ${qr||}; # sv_2nv on a regexp
2068$v = ${qr||} << 2; # sv_2uv on a regexp
2069
2070sub TIESCALAR{bless[]}
2071sub FETCH {${qr||}}
2072tie $t, "";
2073$v = 1.1 * $t; # sv_2nv on a tied regexp
2074
2075EXPECT
2076########
2077# multi-level uninitialised array/hash indexes
2078use warnings 'uninitialized';
2079
2080our ($i0, $i2, $i4, $i6, $i8, $i10, $i12);
2081my  ($i1, $i3, $i5, $i7, $i9, $i11, $i13);
2082
2083my (@a,%h);
2084my $v;
2085
2086
2087# use enough depth that OP_MULTIDEREF needs more than one action word
2088
2089$v = $a[$i0]{$i1}[$i2]{$i3}[$i4]{$i5}[$i6]{$i7}[$i8]{$i9}[$i10]{$i11}[$i12]{$i13};
2090$v = $h{$i0}[$i1]{$i2}[$i3]{$i4}[$i5]{$i6}[$i7]{$i8}[$i9]{$i10}[$i11]{$i12}[$i13];
2091
2092EXPECT
2093Use of uninitialized value $i0 in array element at - line 13.
2094Use of uninitialized value $i1 in hash element at - line 13.
2095Use of uninitialized value $i2 in array element at - line 13.
2096Use of uninitialized value $i3 in hash element at - line 13.
2097Use of uninitialized value $i4 in array element at - line 13.
2098Use of uninitialized value $i5 in hash element at - line 13.
2099Use of uninitialized value $i6 in array element at - line 13.
2100Use of uninitialized value $i7 in hash element at - line 13.
2101Use of uninitialized value $i8 in array element at - line 13.
2102Use of uninitialized value $i9 in hash element at - line 13.
2103Use of uninitialized value $i10 in array element at - line 13.
2104Use of uninitialized value $i11 in hash element at - line 13.
2105Use of uninitialized value $i12 in array element at - line 13.
2106Use of uninitialized value $i13 in hash element at - line 13.
2107Use of uninitialized value $i0 in hash element at - line 14.
2108Use of uninitialized value $i1 in array element at - line 14.
2109Use of uninitialized value $i2 in hash element at - line 14.
2110Use of uninitialized value $i3 in array element at - line 14.
2111Use of uninitialized value $i4 in hash element at - line 14.
2112Use of uninitialized value $i5 in array element at - line 14.
2113Use of uninitialized value $i6 in hash element at - line 14.
2114Use of uninitialized value $i7 in array element at - line 14.
2115Use of uninitialized value $i8 in hash element at - line 14.
2116Use of uninitialized value $i9 in array element at - line 14.
2117Use of uninitialized value $i10 in hash element at - line 14.
2118Use of uninitialized value $i11 in array element at - line 14.
2119Use of uninitialized value $i12 in hash element at - line 14.
2120Use of uninitialized value $i13 in array element at - line 14.
2121########
2122# misc multideref
2123use warnings 'uninitialized';
2124my ($i,$j,$k);
2125my @a;
2126my @ra = \@a;
2127my $v;
2128$v = exists $a[$i]{$k};
2129$v = delete $a[$i]{$k};
2130$v = local $a[$i]{$k};
2131delete $a[$i]{$k};
2132$v = $ra->[$i+$j]{$k};
2133$v = ($ra//0)->[$i]{$k};
2134$v = $a[length $i]{$k}
2135EXPECT
2136Use of uninitialized value $i in array element at - line 7.
2137Use of uninitialized value $k in exists at - line 7.
2138Use of uninitialized value $i in array element at - line 8.
2139Use of uninitialized value $k in delete at - line 8.
2140Use of uninitialized value $i in array element at - line 9.
2141Use of uninitialized value $k in hash element at - line 9.
2142Use of uninitialized value $k in hash element at - line 9.
2143Use of uninitialized value $k in hash element at - line 9.
2144Use of uninitialized value $i in array element at - line 10.
2145Use of uninitialized value $k in delete at - line 10.
2146Use of uninitialized value $j in addition (+) at - line 11.
2147Use of uninitialized value $i in addition (+) at - line 11.
2148Use of uninitialized value $k in hash element at - line 11.
2149Use of uninitialized value $i in array element at - line 12.
2150Use of uninitialized value $k in hash element at - line 12.
2151Use of uninitialized value $i in array element at - line 13.
2152Use of uninitialized value $k in hash element at - line 13.
2153########
2154# perl #127877
2155use warnings 'uninitialized';
2156my ($p, $q, $r, $s, $t, $u, $v, $w, $x, $y);
2157$p = $p . "a";
2158$q .= "a";
2159$r = $r + 17;
2160$s += 17;
2161$t = $t - 17;
2162$u -= 17;
2163use integer;
2164$v = $v + 17;
2165$w += 17;
2166$x = $x - 17;
2167$y -= 17;
2168EXPECT
2169Use of uninitialized value $p in concatenation (.) or string at - line 4.
2170Use of uninitialized value $r in addition (+) at - line 6.
2171Use of uninitialized value $t in subtraction (-) at - line 8.
2172Use of uninitialized value $v in integer addition (+) at - line 11.
2173Use of uninitialized value $x in integer subtraction (-) at - line 13.
2174########
2175# NAME 64-bit array subscripts
2176# SKIP ? length(pack "p", "") < 8
2177use warnings 'uninitialized';
2178
2179# aelem + const
2180use constant foo => \0;
2181$SIG{__WARN__} = sub {
2182 print STDERR
2183   $_[0] =~ /\$a\[([^]]+)]/ && $1 == foo
2184       ? "ok\n"
2185       : ("$1 != ",0+foo,"\n")
2186};
2187() = "$a[foo]";
2188undef $SIG{__WARN__};
2189
2190# Multideref
2191() = "$a[140688675223280]";
2192EXPECT
2193ok
2194Use of uninitialized value $a[140688675223280] in string at - line 15.
2195########
2196# RT #128940
2197use warnings 'uninitialized';
2198my $x = "" . open my $fh, "<", "no / such / file";
2199EXPECT
2200Use of uninitialized value in concatenation (.) or string at - line 3.
2201########
2202# RT #123910
2203# undef's arg being undef doesn't trigger warnings - any warning will be
2204# from tied/magic vars
2205use warnings 'uninitialized';
2206undef $0;
2207EXPECT
2208Use of uninitialized value in undef operator at - line 5.
2209########
2210# RT #134275
2211# This was SEGVing due to the multideref code in S_find_uninit_var not
2212# handling a GV with a null gp_hv slot.
2213use warnings 'uninitialized';
2214"" =~ /$foo{a}${*foo=*bar}$x/;
2215EXPECT
2216Use of uninitialized value in regexp compilation at - line 5.
2217Use of uninitialized value in regexp compilation at - line 5.
2218Use of uninitialized value $x in regexp compilation at - line 5.
2219