diff options
Diffstat (limited to 't/pragma/warn/toke')
-rw-r--r-- | t/pragma/warn/toke | 213 |
1 files changed, 209 insertions, 4 deletions
diff --git a/t/pragma/warn/toke b/t/pragma/warn/toke index da6c0dc9ae..72c1e2fddc 100644 --- a/t/pragma/warn/toke +++ b/t/pragma/warn/toke @@ -97,6 +97,21 @@ toke.c AOK use utf8 ; $_ = "\xffe" + 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' ; @@ -106,6 +121,13 @@ use warning 'deprecated' ; 1 if $a LT $b ; 1 if $a GE $b ; 1 if $a LE $b ; +no warning '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 ; EXPECT Use of EQ is deprecated at - line 3. Use of NE is deprecated at - line 4. @@ -120,24 +142,31 @@ format STDOUT = @<<< @||| @>>> @>>> $a $b "abc" 'def' . -($a, $b) = (1,2,3); -write; +no warning 'deprecated' ; +format STDOUT = +@<<< @||| @>>> @>>> +$a $b "abc" 'def' +. 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' ; $a = <<; +no warning 'deprecated' ; +$a = <<; + EXPECT Use of bare << to mean <<"" is deprecated at - line 3. ######## # toke.c use warning 'syntax' ; s/(abc)/\1/; +no warning 'syntax' ; +s/(abc)/\1/; EXPECT \1 better written as $1 at - line 3. ######## @@ -145,6 +174,9 @@ EXPECT use warning 'semicolon' ; $a = 1 &time ; +no warning 'semicolon' ; +$a = 1 +&time ; EXPECT Semicolon seems to be missing at - line 3. ######## @@ -180,14 +212,40 @@ Reversed <= operator at - line 15. Unterminated <> operator at - line 15. ######## # toke.c +BEGIN { + # Scalars leaked: due to syntax errors + $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; +} +no warning '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 warning 'syntax' ; my $a = $a[1,2] ; +no warning 'syntax' ; +my $a = $a[1,2] ; EXPECT Multidimensional syntax $a[1,2] not supported at - line 3. ######## # toke.c use warning 'syntax' ; sub fred {} ; $SIG{TERM} = fred; +no warning 'syntax' ; +$SIG{TERM} = fred; EXPECT You need to quote "fred" at - line 3. ######## @@ -195,6 +253,9 @@ You need to quote "fred" at - line 3. use warning 'syntax' ; @a[3] = 2; @a{3} = 2; +no warning 'syntax' ; +@a[3] = 2; +@a{3} = 2; EXPECT Scalar value @a[3] better written as $a[3] at - line 3. Scalar value @a{3} better written as $a{3} at - line 4. @@ -203,36 +264,49 @@ Scalar value @a{3} better written as $a{3} at - line 4. use warning 'syntax' ; $_ = "ab" ; s/(ab)/\1/e; +no warning 'syntax' ; +$_ = "ab" ; +s/(ab)/\1/e; EXPECT Can't use \1 to mean $1 in expression at - line 4. ######## # toke.c use warning 'reserved' ; $a = abc; +no warning 'reserved' ; +$a = abc; EXPECT Unquoted string "abc" may clash with future reserved word at - line 3. ######## # toke.c use warning 'octal' ; chmod 3; +no warning 'octal' ; +chmod 3; EXPECT chmod: mode argument is missing initial 0 at - line 3, at end of line ######## # toke.c use warning 'syntax' ; @a = qw(a, b, c) ; +no warning 'syntax' ; +@a = qw(a, b, c) ; EXPECT Possible attempt to separate words with commas at - line 3. ######## # toke.c use warning 'syntax' ; @a = qw(a b #) ; +no warning 'syntax' ; +@a = qw(a b #) ; EXPECT Possible attempt to put comments in qw() list at - line 3. ######## # toke.c use warning 'octal' ; umask 3; +no warning 'octal' ; +umask 3; EXPECT umask: argument is missing initial 0 at - line 3, at end of line ######## @@ -243,20 +317,40 @@ EXPECT print (...) interpreted as function at - line 3. ######## # toke.c +no warning 'syntax' ; +print ("") +EXPECT + +######## +# toke.c use warning 'syntax' ; printf ("") EXPECT printf (...) interpreted as function at - line 3. ######## # toke.c +no warning 'syntax' ; +printf ("") +EXPECT + +######## +# toke.c use warning 'syntax' ; sort ("") EXPECT sort (...) interpreted as function at - line 3. ######## # toke.c +no warning 'syntax' ; +sort ("") +EXPECT + +######## +# toke.c use warning 'ambiguous' ; $a = ${time[2]}; +no warning 'ambiguous' ; +$a = ${time[2]}; EXPECT Ambiguous use of ${time[...]} resolved to $time[...] at - line 3. ######## @@ -267,8 +361,16 @@ EXPECT Ambiguous use of ${time{...}} resolved to $time{...} at - line 3. ######## # toke.c +no warning 'ambiguous' ; +$a = ${time{2}}; +EXPECT + +######## +# toke.c use warning 'ambiguous' ; $a = ${time} ; +no warning 'ambiguous' ; +$a = ${time} ; EXPECT Ambiguous use of ${time} resolved to $time at - line 3. ######## @@ -276,6 +378,8 @@ Ambiguous use of ${time} resolved to $time at - line 3. use warning 'ambiguous' ; sub fred {} $a = ${fred} ; +no warning 'ambiguous' ; +$a = ${fred} ; EXPECT Ambiguous use of ${fred} resolved to $fred at - line 4. ######## @@ -283,6 +387,9 @@ Ambiguous use of ${fred} resolved to $fred at - line 4. use warning 'syntax' ; $a = 1_2; $a = 1_2345_6; +no warning 'syntax' ; +$a = 1_2; +$a = 1_2345_6; EXPECT Misplaced _ in number at - line 3. Misplaced _ in number at - line 4. @@ -292,13 +399,18 @@ Misplaced _ in number at - line 4. use warning 'unsafe' ; #line 25 "bar" $a = FRED:: ; +no warning 'unsafe' ; +#line 25 "bar" +$a = FRED:: ; EXPECT Bareword "FRED::" refers to nonexistent package at bar line 25. ######## # toke.c use warning 'ambiguous' ; sub time {} -my $a = time() +my $a = time() ; +no warning 'ambiguous' ; +my $b = time() ; EXPECT Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4. ######## @@ -314,8 +426,101 @@ EXPECT Use of \x{} without utf8 declaration at foo line 30. ######## # toke.c +no warning 'utf8' ; +eval <<'EOE'; +{ +#line 30 "foo" + $_ = " \x{123} " ; +} +EOE +EXPECT + +######## +# toke.c use warning 'utf8' ; use utf8 ; $_ = " \xffe " ; +no warning 'utf8' ; +$_ = " \xffe " ; EXPECT \xff will produce malformed UTF-8 character; use \x{ff} for that at - line 4. +######## +# 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 warning 'ambiguous' ; + $a = rand + 4 ; + use warning '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 warning 'ambiguous' ; + -fred ; + use warning '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 warning 'ambiguous' ; + open FOO || time; + use warning 'ambiguous' ; + 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 warning 'ambiguous' ; + *foo *foo ; + use warning '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. |