X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/4f187fc91707286d3f695e2ea5e34351c2516fc6..3207fc6be298e308e8094e866ca339ba7e9a2790:/t/lib/warnings/9uninit diff --git a/t/lib/warnings/9uninit b/t/lib/warnings/9uninit index 50e7f50..717e7f6 100644 --- a/t/lib/warnings/9uninit +++ b/t/lib/warnings/9uninit @@ -33,6 +33,19 @@ Use of uninitialized value $m2 in addition (+) at - line 6. Use of uninitialized value $m1 in addition (+) at - line 6. ######## use warnings 'uninitialized'; +use utf8; +use open qw( :utf8 :std ); + +$v = $à1 + 10; +$v = 22 + $a2; +$v = $à1 + $a2; +EXPECT +Use of uninitialized value $à1 in addition (+) at - line 5. +Use of uninitialized value $a2 in addition (+) at - line 6. +Use of uninitialized value $a2 in addition (+) at - line 7. +Use of uninitialized value $à1 in addition (+) at - line 7. +######## +use warnings 'uninitialized'; my ($m1, $v); our ($g1, $g2); @@ -296,9 +309,11 @@ our ($g1); close $m1; # exercises rv2gv close $g1; # exercises rv2gv +close undef; # exercises rv2gv EXPECT Use of uninitialized value $m1 in ref-to-glob cast at - line 5. Use of uninitialized value $g1 in ref-to-glob cast at - line 6. +Use of uninitialized value in ref-to-glob cast at - line 7. ######## use warnings 'uninitialized'; my ($m1, $m2, $v); @@ -380,8 +395,8 @@ my ($s5,$s6); chop ($s5,$s6); EXPECT Use of uninitialized value $s1 in scalar chomp at - line 3. Use of uninitialized value $s2 in scalar chop at - line 4. -Use of uninitialized value $s4 in chomp at - line 5. Use of uninitialized value $s3 in chomp at - line 5. +Use of uninitialized value $s4 in chomp at - line 5. Use of uninitialized value $s5 in chop at - line 6. Use of uninitialized value $s6 in chop at - line 6. ######## @@ -396,8 +411,8 @@ chomp ($x, $y); chop ($x, $y); EXPECT Use of uninitialized value ${$/} in scalar chomp at - line 6. Use of uninitialized value ${$/} in chomp at - line 8. -Use of uninitialized value $y in chomp at - line 8. Use of uninitialized value ${$/} in chomp at - line 8. +Use of uninitialized value $y in chomp at - line 8. Use of uninitialized value $y in chop at - line 8. ######## use warnings 'uninitialized'; @@ -448,25 +463,79 @@ Use of uninitialized value $g1 in exists at - line 8. use warnings 'uninitialized'; my ($m1, $m2); my ($v, @a); +my ($t, $u) = (1, 1); local $.; -@ma = (1 .. 2); +@ma = (1 .. 2); +@ma = ($t .. 2); @ma = ($m1 .. 2); -@ma = (1 .. $m2); -@ma = ($m1 .. $m2); +@ma = (1 .. $u); +@ma = (1 .. $m2); -$v = (1 .. 2); +@ma = (1 ... 2); +@ma = ($t ... 2); +@ma = ($m1 ... 2); +@ma = (1 ... $u); +@ma = (1 ... $m2); + +$v = (1 .. 2); +$v = ($t .. 2); $v = ($m1 .. 2); -$v = (1 .. $m2); +$v = (1 .. $u); +$v = (1 .. $m2); + +$v = (1 ... 2); +$v = ($t ... 2); +$v = ($m1 ... 2); +$v = (1 ... $u); +$v = (1 ... $m2); +EXPECT +Use of uninitialized value $m1 in range (or flop) at - line 10. +Use of uninitialized value $m2 in range (or flop) at - line 12. +Use of uninitialized value $m1 in range (or flop) at - line 16. +Use of uninitialized value $m2 in range (or flop) at - line 18. +Use of uninitialized value $. in range (or flip) at - line 20. +Use of uninitialized value $. in range (or flop) at - line 21. +Use of uninitialized value $. in range (or flip) at - line 23. +Use of uninitialized value $. in range (or flip) at - line 24. +Use of uninitialized value $. in range (or flip) at - line 26. +Use of uninitialized value $. in range (or flip) at - line 29. +Use of uninitialized value $. in range (or flip) at - line 30. +######## +use warnings 'uninitialized'; +my ($m1, $m2); +my ($v, @a); +my ($t, $u) = (1, 1); + +@ma = ($t .. $u); +@ma = ($m1 .. $u); +@ma = ($t .. $m2); +@ma = ($m1 .. $m2); + +@ma = ($t ... $u); +@ma = ($m1 ... $u); +@ma = ($t ... $m2); +@ma = ($m1 ... $m2); + +$v = ($t .. $u); +$v = ($m1 .. $u); +$v = ($t .. $m2); $v = ($m1 .. $m2); + +$v = ($t ... $u); +$v = ($m1 ... $u); +$v = ($t ... $m2); +$v = ($m1 ... $m2); EXPECT -Use of uninitialized value $m1 in range (or flop) at - line 8. +Use of uninitialized value $m1 in range (or flop) at - line 7. +Use of uninitialized value $m2 in range (or flop) at - line 8. +Use of uninitialized value $m1 in range (or flop) at - line 9. Use of uninitialized value $m2 in range (or flop) at - line 9. -Use of uninitialized value in range (or flop) at - line 10. -Use of uninitialized value in range (or flop) at - line 10. -Use of uninitialized value $. in range (or flip) at - line 12. -Use of uninitialized value $. in range (or flip) at - line 14. +Use of uninitialized value $m1 in range (or flop) at - line 12. +Use of uninitialized value $m2 in range (or flop) at - line 13. +Use of uninitialized value $m1 in range (or flop) at - line 14. +Use of uninitialized value $m2 in range (or flop) at - line 14. ######## use warnings 'uninitialized'; my ($m1, $v); @@ -563,6 +632,19 @@ my @sort; @sort = sort {$a <=> $b} $m1, $g1; sub sortf {$a-1 <=> $b-1}; @sort = sort &sortf, $m1, $g1; +@sort = sort { undef } 1, 2; +sub frobnicate($$) { undef } +@sort = sort frobnicate 1, 2; +@sort = sort pyfg 1, 2; +@sort = sort pyfgc 1, 2; +no warnings; +sub pyfg { undef } +sub pyfgc($$) { undef } +use warnings; +sub dog {} +sub dogwood($$) {} +@sort = sort dog 1,2; +@sort = sort dogwood 1,2; EXPECT Use of uninitialized value $m1 in sort at - line 6. Use of uninitialized value $g1 in sort at - line 6. @@ -580,6 +662,28 @@ Use of uninitialized value $m1 in sort at - line 9. Use of uninitialized value $m1 in sort at - line 9. Use of uninitialized value $g1 in sort at - line 9. Use of uninitialized value $g1 in sort at - line 9. +Use of uninitialized value in sort at - line 10. +Use of uninitialized value in sort at - line 12. +Use of uninitialized value in sort at - line 13. +Use of uninitialized value in sort at - line 14. +Use of uninitialized value in sort at - line 21. +Use of uninitialized value in sort at - line 22. +######## +my $nan = sin 9**9**9; +if ($nan == $nan) { + print <$b} case should behave the same way as unoptimised. +@sort = sort { ($a)[0] <=> $b } 1, $nan; +@sort = sort { $a <=> $b } 1, $nan; +EXPECT +Use of uninitialized value in sort at - line 11. +Use of uninitialized value in sort at - line 12. ######## use warnings 'uninitialized'; my ($m1, $m2, $v); @@ -634,6 +738,23 @@ Use of uninitialized value $g1 in subtraction (-) at - line 20. Use of uninitialized value $m1 in subtraction (-) at - line 20. ######## use warnings 'uninitialized'; +sub TIESCALAR{bless[]} +sub FETCH { undef } + +tie my $m1, ""; +my $v; +$v = $m1 + $m1; +$v = $m1 - $m1; +no warnings; +$v = $m1 + $m1; +$v = $m1 - $m1; +EXPECT +Use of uninitialized value $m1 in addition (+) at - line 7. +Use of uninitialized value $m1 in addition (+) at - line 7. +Use of uninitialized value $m1 in subtraction (-) at - line 8. +Use of uninitialized value $m1 in subtraction (-) at - line 8. +######## +use warnings 'uninitialized'; my ($m1, $v); our ($g1); @@ -664,6 +785,7 @@ s/$m1/z/; undef $_; s//$g1/; undef $_; s/$m1/$g1/; undef $_; tr/x/y/; undef $_; +tr/x/y/r; undef $_; my $_; /y/; @@ -674,6 +796,7 @@ s/$m1/z/; undef $_; s//$g1/; undef $_; s/$m1/$g1/; undef $_; tr/x/y/; undef $_; +tr/x/y/r; undef $_; $g2 =~ /y/; $g2 =~ /$m1/; @@ -683,6 +806,7 @@ $g2 =~ s/$m1/z/; undef $g2; $g2 =~ s//$g1/; undef $g2; $g2 =~ s/$m1/$g1/; undef $g2; $g2 =~ tr/x/y/; undef $g2; # XXX can't extract var name yet +$g2 =~ tr/x/y/r; undef $g2; # XXX can't extract var name yet my $foo = "abc"; $foo =~ /$m1/; @@ -714,50 +838,53 @@ Use of uninitialized value $_ in substitution (s///) at - line 12. Use of uninitialized value $_ in substitution (s///) at - line 12. Use of uninitialized value $g1 in substitution iterator at - line 12. Use of uninitialized value $_ in transliteration (tr///) at - line 13. -Use of uninitialized value $_ in pattern match (m//) at - line 16. -Use of uninitialized value $m1 in regexp compilation at - line 17. +Use of uninitialized value $_ in transliteration (tr///) at - line 14. Use of uninitialized value $_ in pattern match (m//) at - line 17. -Use of uninitialized value $g1 in regexp compilation at - line 18. +Use of uninitialized value $m1 in regexp compilation at - line 18. Use of uninitialized value $_ in pattern match (m//) at - line 18. -Use of uninitialized value $_ in substitution (s///) at - line 19. -Use of uninitialized value $m1 in regexp compilation at - line 20. -Use of uninitialized value $_ in substitution (s///) at - line 20. +Use of uninitialized value $g1 in regexp compilation at - line 19. +Use of uninitialized value $_ in pattern match (m//) at - line 19. Use of uninitialized value $_ in substitution (s///) at - line 20. +Use of uninitialized value $m1 in regexp compilation at - line 21. Use of uninitialized value $_ in substitution (s///) at - line 21. -Use of uninitialized value $g1 in substitution (s///) at - line 21. Use of uninitialized value $_ in substitution (s///) at - line 21. -Use of uninitialized value $g1 in substitution (s///) at - line 21. -Use of uninitialized value $m1 in regexp compilation at - line 22. Use of uninitialized value $_ in substitution (s///) at - line 22. +Use of uninitialized value $g1 in substitution (s///) at - line 22. Use of uninitialized value $_ in substitution (s///) at - line 22. -Use of uninitialized value $g1 in substitution iterator at - line 22. -Use of uninitialized value $_ in transliteration (tr///) at - line 23. -Use of uninitialized value $g2 in pattern match (m//) at - line 25. -Use of uninitialized value $m1 in regexp compilation at - line 26. -Use of uninitialized value $g2 in pattern match (m//) at - line 26. -Use of uninitialized value $g1 in regexp compilation at - line 27. +Use of uninitialized value $g1 in substitution (s///) at - line 22. +Use of uninitialized value $m1 in regexp compilation at - line 23. +Use of uninitialized value $_ in substitution (s///) at - line 23. +Use of uninitialized value $_ in substitution (s///) at - line 23. +Use of uninitialized value $g1 in substitution iterator at - line 23. +Use of uninitialized value $_ in transliteration (tr///) at - line 24. +Use of uninitialized value $_ in transliteration (tr///) at - line 25. Use of uninitialized value $g2 in pattern match (m//) at - line 27. -Use of uninitialized value $g2 in substitution (s///) at - line 28. -Use of uninitialized value $m1 in regexp compilation at - line 29. -Use of uninitialized value $g2 in substitution (s///) at - line 29. -Use of uninitialized value $g2 in substitution (s///) at - line 29. -Use of uninitialized value $g2 in substitution (s///) at - line 30. -Use of uninitialized value $g1 in substitution (s///) at - line 30. +Use of uninitialized value $m1 in regexp compilation at - line 28. +Use of uninitialized value $g2 in pattern match (m//) at - line 28. +Use of uninitialized value $g1 in regexp compilation at - line 29. +Use of uninitialized value $g2 in pattern match (m//) at - line 29. Use of uninitialized value $g2 in substitution (s///) at - line 30. -Use of uninitialized value $g1 in substitution (s///) at - line 30. Use of uninitialized value $m1 in regexp compilation at - line 31. Use of uninitialized value $g2 in substitution (s///) at - line 31. Use of uninitialized value $g2 in substitution (s///) at - line 31. -Use of uninitialized value $g1 in substitution iterator at - line 31. -Use of uninitialized value in transliteration (tr///) at - line 32. -Use of uninitialized value $m1 in regexp compilation at - line 35. -Use of uninitialized value $g1 in regexp compilation at - line 36. +Use of uninitialized value $g2 in substitution (s///) at - line 32. +Use of uninitialized value $g1 in substitution (s///) at - line 32. +Use of uninitialized value $g2 in substitution (s///) at - line 32. +Use of uninitialized value $g1 in substitution (s///) at - line 32. +Use of uninitialized value $m1 in regexp compilation at - line 33. +Use of uninitialized value $g2 in substitution (s///) at - line 33. +Use of uninitialized value $g2 in substitution (s///) at - line 33. +Use of uninitialized value $g1 in substitution iterator at - line 33. +Use of uninitialized value in transliteration (tr///) at - line 34. +Use of uninitialized value in transliteration (tr///) at - line 35. Use of uninitialized value $m1 in regexp compilation at - line 38. -Use of uninitialized value $g1 in substitution (s///) at - line 39. -Use of uninitialized value $m1 in regexp compilation at - line 40. -Use of uninitialized value $g1 in substitution iterator at - line 40. -Use of uninitialized value $m1 in substitution iterator at - line 41. -Use of uninitialized value in substitution iterator at - line 44. +Use of uninitialized value $g1 in regexp compilation at - line 39. +Use of uninitialized value $m1 in regexp compilation at - line 41. +Use of uninitialized value $g1 in substitution (s///) at - line 42. +Use of uninitialized value $m1 in regexp compilation at - line 43. +Use of uninitialized value $g1 in substitution iterator at - line 43. +Use of uninitialized value $m1 in substitution iterator at - line 44. +Use of uninitialized value in substitution iterator at - line 47. ######## use warnings 'uninitialized'; my ($m1); @@ -892,23 +1019,22 @@ Use of uninitialized value $m1 in substr at - line 5. Use of uninitialized value $m2 in substr at - line 6. Use of uninitialized value $g1 in substr at - line 6. Use of uninitialized value $m1 in substr at - line 6. -Use of uninitialized value $g2 in substr at - line 7. Use of uninitialized value $m2 in substr at - line 7. Use of uninitialized value $g1 in substr at - line 7. +Use of uninitialized value $g2 in substr at - line 7. Use of uninitialized value $m1 in substr at - line 7. Use of uninitialized value $g1 in substr at - line 8. +Use of uninitialized value $g2 in substr at - line 8. Use of uninitialized value $m1 in substr at - line 8. -Use of uninitialized value in scalar assignment at - line 8. Use of uninitialized value $m2 in substr at - line 9. Use of uninitialized value $g1 in substr at - line 9. +Use of uninitialized value $g2 in substr at - line 9. Use of uninitialized value $m1 in substr at - line 9. -Use of uninitialized value in scalar assignment at - line 9. Use of uninitialized value $m2 in vec at - line 11. Use of uninitialized value $g1 in vec at - line 11. Use of uninitialized value $m1 in vec at - line 11. Use of uninitialized value $m2 in vec at - line 12. Use of uninitialized value $g1 in vec at - line 12. -Use of uninitialized value $m1 in vec at - line 12. Use of uninitialized value $m1 in index at - line 14. Use of uninitialized value $m2 in index at - line 14. Use of uninitialized value $g1 in index at - line 15. @@ -1062,10 +1188,10 @@ use warnings 'uninitialized'; my ($v); # check hash key is sanitised -my %h = ("\0011\002\r\n\t\f\"\\abcdefghijklmnopqrstuvwxyz", undef); +my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef); $v = join '', %h; EXPECT -Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\abcdefghijklm"...} in join or string at - line 6. +Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6. ######## use warnings 'uninitialized'; my ($m1, $v); @@ -1099,8 +1225,6 @@ Use of uninitialized value $m1 in splice at - line 10. Use of uninitialized value $g1 in splice at - line 10. Use of uninitialized value in addition (+) at - line 10. Use of uninitialized value $m1 in method lookup at - line 13. -Use of uninitialized value in subroutine entry at - line 15. -Use of uninitialized value in subroutine entry at - line 16. Use of uninitialized value $m1 in warn at - line 18. Use of uninitialized value $g1 in warn at - line 18. foo at - line 18. @@ -1880,6 +2004,45 @@ Use of uninitialized value in addition (+) at - line 5. ######## use warnings 'uninitialized'; my $v; -{ my $x = -1; $v = 1 + sysseek(STDIN, $x, 0); } +{ my $x = -1; $v = 1 + sysseek(DATA, $x, 0); } +__END__ +EXPECT +Use of uninitialized value in addition (+) at - line 3. +######## +use warnings 'uninitialized'; +delete $::{'Foo::'}; +my $moo = $Foo::BAR + 42; +__END__ EXPECT Use of uninitialized value in addition (+) at - line 3. +######## +use warnings 'uninitialized'; +use constant {u=>undef, v=>undef}; +sub foo () {u} +sub foo () {v} +EXPECT +######## +# [perl #72090] +use warnings 'uninitialized'; +$a = @$a > 0; +EXPECT +Use of uninitialized value $a in array dereference at - line 3. +Use of uninitialized value in numeric gt (>) at - line 3. +######## +# [perl #103766] +use warnings 'uninitialized'; +"@{[ $x ]}"; +EXPECT +Use of uninitialized value in join or string at - line 3. +######## +# inside formats +use warnings 'uninitialized'; +my $x; +format = +@ +"$x"; +. +write; +EXPECT +Use of uninitialized value $x in string at - line 6. +