This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv.c:varname: Fix bad assertion added by c6fb3f6e
[perl5.git] / t / lib / warnings / 9uninit
index 50e7f50..717e7f6 100644 (file)
@@ -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 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);
 
 my ($m1, $v);
 our ($g1, $g2);
 
@@ -296,9 +309,11 @@ our ($g1);
 
 close $m1;     # exercises rv2gv
 close $g1;     # exercises rv2gv
 
 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.
 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);
 ########
 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.
 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 $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.
 ########
 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.
 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 ${$/} 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';
 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);
 use warnings 'uninitialized';
 my ($m1, $m2);
 my ($v, @a);
+my ($t, $u) = (1, 1);
 
 local $.;
 
 
 local $.;
 
-@ma = (1 .. 2);
+@ma = (1   .. 2);
+@ma = ($t  .. 2);
 @ma = ($m1 .. 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 = ($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 = ($m1 .. $m2);
+
+$v = ($t  ... $u);
+$v = ($m1 ... $u);
+$v = ($t  ... $m2);
+$v = ($m1 ... $m2);
 EXPECT
 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 $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);
 ########
 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 {$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.
 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 $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 <<EOM ;
+SKIPPED
+# No nan support
+EOM
+    exit ;
+}
+use warnings 'uninitialized';
+# The optimised {$a<=>$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);
 ########
 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';
 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);
 
 my ($m1, $v);
 our ($g1);
 
@@ -664,6 +785,7 @@ s/$m1/z/;   undef $_;
 s//$g1/;       undef $_;
 s/$m1/$g1/;    undef $_;
 tr/x/y/;       undef $_;
 s//$g1/;       undef $_;
 s/$m1/$g1/;    undef $_;
 tr/x/y/;       undef $_;
+tr/x/y/r;      undef $_;
 
 my $_; 
 /y/;
 
 my $_; 
 /y/;
@@ -674,6 +796,7 @@ s/$m1/z/;   undef $_;
 s//$g1/;       undef $_;
 s/$m1/$g1/;    undef $_;
 tr/x/y/;       undef $_;
 s//$g1/;       undef $_;
 s/$m1/$g1/;    undef $_;
 tr/x/y/;       undef $_;
+tr/x/y/r;      undef $_;
 
 $g2 =~ /y/;
 $g2 =~ /$m1/;
 
 $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 =~ 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/;
 
 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 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 $_ 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 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 $_ 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 $_ 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 $_ 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 $_ 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 $_ 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 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 $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 $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 $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);
 ########
 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 $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 $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 $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 $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 $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 $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 $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.
 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 ($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
 $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);
 ########
 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 $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.
 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;
 ########
 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.
 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.
+