Do no -warn on \_, only on \alpha.
[p5sagit/p5-mst-13.2.git] / t / pragma / warn / toke
index da6c0dc..b410e19 100644 (file)
@@ -14,7 +14,7 @@ toke.c        AOK
                (called 3 times via depcom)
 
      \1 better written as $1 
-       use warning 'syntax' ;
+       use warnings 'syntax' ;
        s/(abc)/\1/;
  
      warn(warn_nosemi) 
@@ -52,7 +52,7 @@ toke.c        AOK
      warn(warn_reserved        
        $a = abc;
 
-     chmod: mode argument is missing initial 0 
+     chmod() mode argument is missing initial 0 
        chmod 3;
 
      Possible attempt to separate words with commas 
@@ -89,17 +89,56 @@ toke.c      AOK
        sub time {} 
        my $a = time()
 
-    Use of \\x{} without utf8 declaration
-       $_ = " \x{123} " ;
+    Unrecognized escape \\%c passed through
+        $a = "\m" ;
 
+    %s number > %s non-portable
+        my $a =  0b011111111111111111111111111111110 ;
+        $a =  0b011111111111111111111111111111111 ;
+        $a =  0b111111111111111111111111111111111 ;
+        $a =  0x0fffffffe ;
+        $a =  0x0ffffffff ;
+        $a =  0x1ffffffff ;
+        $a =  0037777777776 ;
+        $a =  0037777777777 ;
+        $a =  0047777777777 ;
 
-    \x%.*s will produce malformed UTF-8 character; use \x{%.*s} for that
-        use utf8 ; 
-       $_ = "\xffe"
+    Integer overflow in binary number
+        my $a =  0b011111111111111111111111111111110 ;
+        $a =  0b011111111111111111111111111111111 ;
+        $a =  0b111111111111111111111111111111111 ;
+        $a =  0x0fffffffe ;
+        $a =  0x0ffffffff ;
+        $a =  0x1ffffffff ;
+        $a =  0037777777776 ;
+        $a =  0037777777777 ;
+        $a =  0047777777777 ;
      
+    Mandatory Warnings
+    ------------------
+    Use of "%s" without parentheses is ambiguous       [check_uni]
+        rand + 4 
+
+    Ambiguous use of -%s resolved as -&%s()            [yylex]
+        sub fred {} ; - fred ;
+
+    Precedence problem: open %.*s should be open(%.*s) [yylex]
+       open FOO || die;
+
+    Operator or semicolon missing before %c%s          [yylex]
+    Ambiguous use of %c resolved as operator %c
+        *foo *foo
+
 __END__
 # toke.c 
-use warning 'deprecated' ;
+use warnings 'deprecated' ;
+1 if $a EQ $b ;
+1 if $a NE $b ;
+1 if $a GT $b ;
+1 if $a LT $b ;
+1 if $a GE $b ;
+1 if $a LE $b ;
+no warnings 'deprecated' ;
 1 if $a EQ $b ;
 1 if $a NE $b ;
 1 if $a GT $b ;
@@ -115,34 +154,44 @@ Use of GE is deprecated at - line 7.
 Use of LE is deprecated at - line 8.
 ########
 # toke.c
-use warning 'deprecated' ;
+use warnings 'deprecated' ;
+format STDOUT =
+@<<<  @|||  @>>>  @>>>
+$a    $b    "abc" 'def'
+.
+no warnings 'deprecated' ;
 format STDOUT =
 @<<<  @|||  @>>>  @>>>
 $a    $b    "abc" 'def'
 .
-($a, $b) = (1,2,3);
-write;
 EXPECT
 Use of comma-less variable list is deprecated at - line 5.
 Use of comma-less variable list is deprecated at - line 5.
 Use of comma-less variable list is deprecated at - line 5.
-1      2     abc   def
 ########
 # toke.c
-use warning 'deprecated' ;
+use warnings 'deprecated' ;
+$a = <<;
+
+no warnings 'deprecated' ;
 $a = <<;
 
 EXPECT
 Use of bare << to mean <<"" is deprecated at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
+s/(abc)/\1/;
+no warnings 'syntax' ;
 s/(abc)/\1/;
 EXPECT
 \1 better written as $1 at - line 3.
 ########
 # toke.c
-use warning 'semicolon' ;
+use warnings 'semicolon' ;
+$a = 1
+&time ;
+no warnings 'semicolon' ;
 $a = 1
 &time ;
 EXPECT
@@ -153,7 +202,7 @@ BEGIN {
     # Scalars leaked: due to syntax errors
     $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
 }
-use warning 'syntax' ;
+use warnings 'syntax' ;
 my $a =+ 2 ;
 $a =- 2 ;
 $a =* 2 ;
@@ -171,28 +220,57 @@ Reversed *= operator at - line 9.
 Reversed %= operator at - line 10.
 Reversed &= operator at - line 11.
 Reversed .= operator at - line 12.
-syntax error at - line 12, near "=."
 Reversed ^= operator at - line 13.
-syntax error at - line 13, near "=^"
 Reversed |= operator at - line 14.
-syntax error at - line 14, near "=|"
 Reversed <= operator at - line 15.
+syntax error at - line 12, near "=."
+syntax error at - line 13, near "=^"
+syntax error at - line 14, near "=|"
 Unterminated <> operator at - line 15.
 ########
 # toke.c
-use warning 'syntax' ;
+BEGIN {
+    # Scalars leaked: due to syntax errors
+    $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
+}
+no warnings 'syntax' ;
+my $a =+ 2 ;
+$a =- 2 ;
+$a =* 2 ;
+$a =% 2 ;
+$a =& 2 ;
+$a =. 2 ;
+$a =^ 2 ;
+$a =| 2 ;
+$a =< 2 ;
+$a =/ 2 ;
+EXPECT
+syntax error at - line 12, near "=."
+syntax error at - line 13, near "=^"
+syntax error at - line 14, near "=|"
+Unterminated <> operator at - line 15.
+########
+# toke.c
+use warnings 'syntax' ;
+my $a = $a[1,2] ;
+no warnings 'syntax' ;
 my $a = $a[1,2] ;
 EXPECT
 Multidimensional syntax $a[1,2] not supported at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
 sub fred {} ; $SIG{TERM} = fred;
+no warnings 'syntax' ;
+$SIG{TERM} = fred;
 EXPECT
 You need to quote "fred" at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
+@a[3] = 2;
+@a{3} = 2;
+no warnings 'syntax' ;
 @a[3] = 2;
 @a{3} = 2;
 EXPECT
@@ -200,87 +278,136 @@ Scalar value @a[3] better written as $a[3] at - line 3.
 Scalar value @a{3} better written as $a{3} at - line 4.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
+$_ = "ab" ; 
+s/(ab)/\1/e;
+no warnings 'syntax' ;
 $_ = "ab" ; 
 s/(ab)/\1/e;
 EXPECT
 Can't use \1 to mean $1 in expression at - line 4.
 ########
 # toke.c
-use warning 'reserved' ;
+use warnings 'reserved' ;
+$a = abc;
+$a = { def
+
+=> 1 };
+no warnings 'reserved' ;
 $a = abc;
 EXPECT
 Unquoted string "abc" may clash with future reserved word at - line 3.
 ########
 # toke.c
-use warning 'octal' ;
+use warnings 'chmod' ;
+chmod 3;
+no warnings 'chmod' ;
 chmod 3;
 EXPECT
-chmod: mode argument is missing initial 0 at - line 3, at end of line
+chmod() mode argument is missing initial 0 at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'qw' ;
+@a = qw(a, b, c) ;
+no warnings 'qw' ;
 @a = qw(a, b, c) ;
 EXPECT
 Possible attempt to separate words with commas at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'qw' ;
+@a = qw(a b #) ;
+no warnings 'qw' ;
 @a = qw(a b #) ;
 EXPECT
 Possible attempt to put comments in qw() list at - line 3.
 ########
 # toke.c
-use warning 'octal' ;
+use warnings 'umask' ;
+umask 3;
+no warnings 'umask' ;
 umask 3;
 EXPECT
-umask: argument is missing initial 0 at - line 3, at end of line
+umask: argument is missing initial 0 at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
 print ("")
 EXPECT
 print (...) interpreted as function at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+no warnings 'syntax' ;
+print ("")
+EXPECT
+
+########
+# toke.c
+use warnings 'syntax' ;
 printf ("")
 EXPECT
 printf (...) interpreted as function at - line 3.
 ########
 # toke.c
-use warning 'syntax' ;
+no warnings 'syntax' ;
+printf ("")
+EXPECT
+
+########
+# toke.c
+use warnings 'syntax' ;
 sort ("")
 EXPECT
 sort (...) interpreted as function at - line 3.
 ########
 # toke.c
-use warning 'ambiguous' ;
+no warnings 'syntax' ;
+sort ("")
+EXPECT
+
+########
+# toke.c
+use warnings 'ambiguous' ;
+$a = ${time[2]};
+no warnings 'ambiguous' ;
 $a = ${time[2]};
 EXPECT
 Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
 ########
 # toke.c
-use warning 'ambiguous' ;
+use warnings 'ambiguous' ;
 $a = ${time{2}};
 EXPECT
 Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
 ########
 # toke.c
-use warning 'ambiguous' ;
+no warnings 'ambiguous' ;
+$a = ${time{2}};
+EXPECT
+
+########
+# toke.c
+use warnings 'ambiguous' ;
+$a = ${time} ;
+no warnings 'ambiguous' ;
 $a = ${time} ;
 EXPECT
 Ambiguous use of ${time} resolved to $time at - line 3.
 ########
 # toke.c
-use warning 'ambiguous' ;
+use warnings 'ambiguous' ;
 sub fred {}
 $a = ${fred} ;
+no warnings 'ambiguous' ;
+$a = ${fred} ;
 EXPECT
 Ambiguous use of ${fred} resolved to $fred at - line 4.
 ########
 # toke.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
+$a = 1_2;
+$a = 1_2345_6;
+no warnings 'syntax' ;
 $a = 1_2;
 $a = 1_2345_6;
 EXPECT
@@ -289,33 +416,182 @@ Misplaced _ in number at - line 4.
 Misplaced _ in number at - line 4.
 ########
 # toke.c
-use warning 'unsafe' ;
+use warnings 'bareword' ;
+#line 25 "bar"
+$a = FRED:: ;
+no warnings 'bareword' ;
 #line 25 "bar"
 $a = FRED:: ;
 EXPECT
 Bareword "FRED::" refers to nonexistent package at bar line 25.
 ########
 # toke.c
-use warning 'ambiguous' ;
+use warnings 'ambiguous' ;
 sub time {}
-my $a = time() 
+my $a = time() ;
+no warnings 'ambiguous' ;
+my $b = time() ;
 EXPECT
 Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
 ########
 # toke.c
-use warning 'utf8' ;
+use warnings ;
 eval <<'EOE';
+#  line 30 "foo"
+warn "yelp";
 {
-#line 30 "foo"
   $_ = " \x{123} " ;
 }
 EOE
 EXPECT
-Use of \x{} without utf8 declaration at foo line 30.
+yelp at foo line 30.
+########
+# toke.c
+my $a = rand + 4 ;
+EXPECT
+Warning: Use of "rand" without parens is ambiguous at - line 2.
+########
+# toke.c
+$^W = 0 ;
+my $a = rand + 4 ;
+{
+    no warnings 'ambiguous' ;
+    $a = rand + 4 ;
+    use warnings 'ambiguous' ;
+    $a = rand + 4 ;
+}
+$a = rand + 4 ;
+EXPECT
+Warning: Use of "rand" without parens is ambiguous at - line 3.
+Warning: Use of "rand" without parens is ambiguous at - line 8.
+Warning: Use of "rand" without parens is ambiguous at - line 10.
+########
+# toke.c
+sub fred {};
+-fred ;
+EXPECT
+Ambiguous use of -fred resolved as -&fred() at - line 3.
+########
+# toke.c
+$^W = 0 ;
+sub fred {} ;
+-fred ;
+{
+    no warnings 'ambiguous' ;
+    -fred ;
+    use warnings 'ambiguous' ;
+    -fred ;
+}
+-fred ;
+EXPECT
+Ambiguous use of -fred resolved as -&fred() at - line 4.
+Ambiguous use of -fred resolved as -&fred() at - line 9.
+Ambiguous use of -fred resolved as -&fred() at - line 11.
+########
+# toke.c
+open FOO || time;
+EXPECT
+Precedence problem: open FOO should be open(FOO) at - line 2.
+########
+# toke.c
+$^W = 0 ;
+open FOO || time;
+{
+    no warnings 'precedence' ;
+    open FOO || time;
+    use warnings 'precedence' ;
+    open FOO || time;
+}
+open FOO || time;
+EXPECT
+Precedence problem: open FOO should be open(FOO) at - line 3.
+Precedence problem: open FOO should be open(FOO) at - line 8.
+Precedence problem: open FOO should be open(FOO) at - line 10.
+########
+# toke.c
+$^W = 0 ;
+*foo *foo ;
+{
+    no warnings 'ambiguous' ;
+    *foo *foo ;
+    use warnings 'ambiguous' ;
+    *foo *foo ;
+}
+*foo *foo ;
+EXPECT
+Operator or semicolon missing before *foo at - line 3.
+Ambiguous use of * resolved as operator * at - line 3.
+Operator or semicolon missing before *foo at - line 8.
+Ambiguous use of * resolved as operator * at - line 8.
+Operator or semicolon missing before *foo at - line 10.
+Ambiguous use of * resolved as operator * at - line 10.
+########
+# toke.c
+use warnings 'misc' ;
+my $a = "\m" ;
+my $b = "\_" ;
+no warnings 'misc' ;
+$a = "\m" ;
+$b = "\_" ;
+EXPECT
+Unrecognized escape \m passed through at - line 3.
+########
+# toke.c
+use warnings 'portable' ;
+my $a =  0b011111111111111111111111111111110 ;
+   $a =  0b011111111111111111111111111111111 ;
+   $a =  0b111111111111111111111111111111111 ;
+   $a =  0x0fffffffe ;
+   $a =  0x0ffffffff ;
+   $a =  0x1ffffffff ;
+   $a =  0037777777776 ;
+   $a =  0037777777777 ;
+   $a =  0047777777777 ;
+no warnings 'portable' ;
+   $a =  0b011111111111111111111111111111110 ;
+   $a =  0b011111111111111111111111111111111 ;
+   $a =  0b111111111111111111111111111111111 ;
+   $a =  0x0fffffffe ;
+   $a =  0x0ffffffff ;
+   $a =  0x1ffffffff ;
+   $a =  0037777777776 ;
+   $a =  0037777777777 ;
+   $a =  0047777777777 ;
+EXPECT
+Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
+Hexadecimal number > 0xffffffff non-portable at - line 8.
+Octal number > 037777777777 non-portable at - line 11.
+########
+# toke.c
+use warnings 'overflow' ;
+my $a =  0b011111111111111111111111111111110 ;
+   $a =  0b011111111111111111111111111111111 ;
+   $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
+   $a =  0x0fffffffe ;
+   $a =  0x0ffffffff ;
+   $a =  0x10000000000000000 ;
+   $a =  0037777777776 ;
+   $a =  0037777777777 ;
+   $a =  002000000000000000000000;
+no warnings 'overflow' ;
+   $a =  0b011111111111111111111111111111110 ;
+   $a =  0b011111111111111111111111111111111 ;
+   $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
+   $a =  0x0fffffffe ;
+   $a =  0x0ffffffff ;
+   $a =  0x10000000000000000 ;
+   $a =  0037777777776 ;
+   $a =  0037777777777 ;
+   $a =  002000000000000000000000;
+EXPECT
+Integer overflow in binary number at - line 5.
+Integer overflow in hexadecimal number at - line 8.
+Integer overflow in octal number at - line 11.
 ########
 # toke.c
-use warning 'utf8' ;
-use utf8 ;
-$_ = " \xffe " ;
+use warnings 'ambiguous';
+"@mjd_previously_unused_array";        
+no warnings 'ambiguous';
+"@mjd_previously_unused_array";        
 EXPECT
-\xff will produce malformed UTF-8 character; use \x{ff} for that at - line 4.
+Possible unintended interpolation of @mjd_previously_unused_array in string at - line 3.