Skip to content
This repository has been archived by the owner on Jun 1, 2023. It is now read-only.

signatures #7

Closed
rurban opened this issue Sep 11, 2015 · 4 comments
Closed

signatures #7

rurban opened this issue Sep 11, 2015 · 4 comments
Assignees
Milestone

Comments

@rurban
Copy link
Member

rurban commented Sep 11, 2015

TODO:

  • fix goto to hassig, treat it like a XSUB (MARK->SP): pp2sig, sig2sig, sig2pp. (mostly done)
  • check defgv access in the bodies, error or warn if @_ is used. This is for convenience, but needed for automatic FAKE_SIGNATURE conversion.
  • use it in most core libs (in work, see modernize core modules #97)

LATER:

STATUS:

  • 80% faster than 5.22 sigs, 40% faster than without sigs.
  • based on PERL_FAKE_SIGNATURE by davem, can automatically convert most
    old-style sigs to the new fast ones. this version uses the stack values directly, as with XSUBs. No @_ copying.
  • adds compile-time coretype and arity checks, references, better error messages.

DONE:

  • add typechecking for cv args and return value (done with 9b77750b4b62d38dad21fbf20159b36f48c10250)
  • enable (\@array) and access it as $array->[] arrayref, ditto for hashes. (done)
  • improve error reporting with sigs (name the missing arg, too many arguments: wanted 0-2, got 3, ...)
  • accept proto or sig without any feature or pragma.
  • call-by-value or ref for scalar, array and hash. i.e. copy or ref the arg.
    bind scalarrefs transparently as in perl6 or $_[n] as in perl5.
  • auto-convert signature to prototype. but do not store the proto. only for compile-time arg checking.
  • accept alternative ($a?) syntax for optional arg, as in perl6

See https://github.com/perl11/cperl/commits/feature/gh7-signatures

Overview

p5p came with the worst of all signature implementions which already do exist. The slowest and with the least features, actually blocking critical progress. The newer one in a branch for 5.22 actually looks pretty good (OP_SIGNATURE), but needs a complete rewrite so I wait on this until this lands and stabilizes.
smoke-me/davem/op_signature3

Update: It didn't land, so we use the temp. version and improve it by ourselves. See feature/gh7-signatures https://github.com/perl11/cperl/commits/feature/gh7-signatures

missing support for optional types

as provided for lexical variable declarations, in leading position as
with my int $a; and as attribute, as with ($i :int :const)
we need to seperate core (int, str, num) and user-defined types (class names),
and :const. Maybe more later.
store the typestash similar as in pads. do it again with the new OP_SIGNATURE.

s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
typestash = find_in_my_stash(PL_tokenbuf, len);
var = parse_opt_lexvar();
PADNAME *pn = padnamelist_fetch(PL_comppad_name, var->op_targ);
SvPAD_TYPED_on(pn);
PadnameTYPE_set(pn,
  MUTABLE_HV(SvREFCNT_inc_simple_NN(MUTABLE_SV(typestash))));

missing syntax for return types (as attr)

for easier implementation we support subattributes, : only.
Note that we can add :method and :const also here.

sub add (int $a, int $b=1): int { $a + $b }

=> use i_add op

missing syntax and support for references, call-by-ref

with perl5 all arguments are copied only, as with my $arg1 = shift; but
syntax for fast $_[0] access is not provided.
cperl uses \$name to denote references to scalar lvalues.
with constant arguments use call-by-ref also.

e.g.

sub myfunc(int \$i) : int { $i++ }

modifies the calling argument.

for now scalar lvalue references only, \@a or \%h would be nice with type checks for arrayref
or hashref. maybe \[$] also.

wrong overly slow treatment of @_

Use the stack ABI as with OPs and XS, and do not copy the args into @_ for each call.
@_ is empty. Use your own slurpy parameter.
This makes cperl signatures about 2x faster.

The following applies only to the old slow zefram purple signatures, which are not use anymore:

The elements of @_ are accessed via aelem, not aelemfast,
the arity check is overly big and needs two checks and big strings with fixed arity subs.
replace @_ with direct stackaccess ST(n) with OP_SIGNATURE.

./perl -Ilib -MO=Deparse -e'sub x($a){$a++}'
sub x {
  die sprintf("Too many arguments for subroutine at %s line %d.\n", 
    (caller)[1, 2]) unless @_ <= 1;
  die sprintf("Too few arguments for subroutine at %s line %d.\n", 
    (caller)[1, 2]) unless @_ >= 1;
  my $a = $_[0];
  ();
  $a++;
}

=>

die sprintf("Wrong number arguments for subroutine at %s line %d.\n", 
  (caller)[1, 2]) if @_ != 1;

improve error reporting

In compile-time errors do not only print the position, also the declaration which is violated.
e.g.

@a=(); sub x(\@b) {$b->[0]++} print x(\$a)

Type of arg 1 to main::x must be arrayref (not a scalar ref) at -e line 1, near "\$a)"
=>
Type of arg 1 \@b to x must be arrayref (not a scalar ref) at -e line 1, near "\$a)"

Harmonize error message with the rest:

  • Same compile-time and run-time error messages for the same error.
  • Skip main:: when printing the function name
  • Not enough arguments for %s %s as with the ops and not Too few arguments for %s %s

Add subroutine type and name to error message on arity errors:

Too many arguments for subroutine myfunc
Too many arguments for subroutine entry myfunc
Not enough arguments for multi subroutine myfunc
Too many arguments for method myfunc

Disallow nameless parameters

When they clash with the prototype syntax.


Proper signature types are not only a great help for catching errors
early. they are performance critical, see coffescript, dart, microsoft
typescript, facebook flow and hack. the type inferencer will not be
able to infer many types without explicit types. but with typed
signatures, besides the obvious solution of private methods or closed
classes we can inline most small methods, and improve most loops and
array accesses. it is also critical to implement multi methods, i.e. proper multi-dispatch,
which would enable a proper oo system within perl5.
Dios is close but a hack (PPI macros!), and only with Inside-Out objects.

@rurban rurban modified the milestones: v5.24.0, v5.22.2 Sep 13, 2015
@rurban rurban self-assigned this Sep 20, 2015
This was referenced Dec 24, 2015
rurban pushed a commit that referenced this issue Jan 5, 2016
not undef as in Perl5. We need that for introspection and don't
want a new builtin. prototypes are a shorthand form of signatures
anyway.
Add a new CvSIGOP field to access the signature op from any CV.
[GH #7]
@bulk88
Copy link
Member

bulk88 commented Jan 5, 2016

SHA-1: d8885388e4f84010b7e03fee3eb7abcea7ea539d

* sigs: perl5db.t fixes

no hangs anymore

Win32 VC 2013 32b, verbose testing.

Test Summary Report
-------------------
op/lvref.t                                                      (Wstat: 0 Tests:
 153 Failed: 1)
  Failed test:  147
op/signatures.t                                                 (Wstat: 256 Test
s: 227 Failed: 60)
  Failed tests:  25-26, 37, 50, 59, 70-71, 82-83, 94-95
                114-116, 124, 126, 135-137, 142, 144, 149-151
                156, 159-161, 164, 167-169, 172, 176-180
                183-184, 187, 190, 192-194, 197, 200-202
                205, 208-210, 214-216, 219, 222-223, 226
  Non-zero exit status: 1
  Parse errors: No plan found in TAP output
op/taint.t                                                      (Wstat: 65280 Te
sts: 830 Failed: 0)
  Non-zero exit status: 255
  Parse errors: Bad plan.  You planned 882 tests but ran 830.
op/tie.t                                                        (Wstat: 0 Tests:
 82 Failed: 1)
  Failed test:  41
CANT REPRODUCE INDIVIDUALLY^^^^^^^^^^^
perf/benchmarks.t                                               (Wstat: 0 Tests:
 141 Failed: 4)
  Failed tests:  96-99
../lib/warnings.t                                               (Wstat: 0 Tests:
 869 Failed: 2)
  Failed tests:  362-363
Files=2396, Tests=708389, 3179 wallclock secs (79.50 usr +  5.37 sys = 84.86 CPU
)
Result: FAIL
dmake:  Error code 197, while making 'test'

C:\sources\cperl\win32>
C:\sources\cperl\win32>cd ..\t   & perl harness -v op/lvref.t   & cd ..\win32
op/lvref.t .. # Failed test 147 - padstale alias should not reset state at op/lv
ref.t line 521
#      got ""
# expected "1"

1..153
ok 1 - error when feature is disabled
ok 2 - error when feature is disabled (aassign)
ok 3 - one warning from lv ref assignment
ok 4 - experimental warning
ok 5 - one warning from lv ref list assignment
ok 6 - experimental warning
ok 7 - \$pkg_scalar = ...
ok 8 - \$lexical = ...
ok 9 - \my $lexical = ...
ok 10 - \($pkgvar) = ... gives list context
ok 11 - (\$pkgvar) = ... gives list context
ok 12 - \($lexical) = ... gives list cx
ok 13 - (\$lexical) = ... gives list cx
ok 14 - \(my $lexical) = ... gives list cx
ok 15 - (\my $lexical) = ... gives list cx
ok 16 - \my($lexical) = ... gives list cx
ok 17 - package scalar in \(...)
ok 18 - lex scalar in \(...)
ok 19 - package scalar in (\$foo, \$bar)
ok 20 - lex scalar in (\$foo, \$bar)
ok 21 - \local $scalar assignment
ok 22 - localisation unwound
ok 23 - \(local $scalar) assignment
ok 24 - localisation unwound
ok 25 - globref-to-scalarref assignment
ok 26 - \my $x = ... clears $x on scope exit
ok 27 - \my($x) = ... clears $x on scope exit
ok 28 - \state $x = ... does not clear $x on scope exit
ok 29 - \state($x) = ... does not clear $x on scope exit
ok 30 - \$array[0]
ok 31 - \($array[0])
ok 32 - \$lexical_array[0]
ok 33 - \($lexical_array[0])
ok 34 - \local $a[0]
ok 35 - \local $a[0] unwound
ok 36 - \local ($a[0])
ok 37 - \local $a[0] unwound
ok 38 - \@array[indices]
ok 39 - \(@array[indices])
ok 40 - \local @a[indices]
ok 41 - \local @a[indices] unwound
ok 42 - \$hash{a}
ok 43 - \($hash{a})
ok 44 - \$lexical_array{a}
ok 45 - \($lexical_array{a})
ok 46 - \local $h{a}
ok 47 - \local $h{a} unwound
ok 48 - \local ($h{a})
ok 49 - \local $h{a} unwound
ok 50 - \@hash{indices}
ok 51 - \(@hash{indices})
ok 52 - \local @h{indices}
ok 53 - \local @h{indices} unwound
ok 54 - \@pkg
ok 55 - \@lexical
ok 56 - (\@pkg)
ok 57 - (\@lexical)
ok 58 - \my @lexical
ok 59 - (\my @lexical)
ok 60 - \(@pkg)
ok 61 - \(@lexical)
ok 62 - \(my @lexical)
ok 63 - \my(@lexical)
ok 64 - \local @a
ok 65 - \local @a unwound
ok 66 - (\local @a)
ok 67 - (\local @a) unwound
ok 68 - \my @x = ... clears @x on scope exit
ok 69 - \my(@x) = ... clears @x on scope exit
ok 70 - \state @x = ... does not clear @x on scope exit
ok 71 - \state(@x) = ... does not clear @x on scope exit
ok 72 - \%pkg
ok 73 - \%lexical
ok 74 - (\%pkg)
ok 75 - (\%lexical)
ok 76 - \my %lexical
ok 77 - (\my %lexical)
ok 78 - \local %a
ok 79 - \local %a unwound
ok 80 - (\local %a)
ok 81 - (\local %a) unwound
ok 82 - \my %x = ... clears %x on scope exit
ok 83 - \state %x = ... does not clear %x on scope exit
ok 84 - \&pkg
ok 85 - \&mysub
ok 86 - \&statesub
ok 87 - (\&pkg)
ok 88 - (\&mysub)
ok 89 - (\&statesub)
ok 90 - \(&pkg)
ok 91 - \(&mysub)
ok 92 - \(&statesub)
ok 93 - mixed scalar ref and scalar list assignment
ok 94 - \$scalar in list assignment
ok 95 - \@array in list assignment
ok 96 - \%hash in list assignment
ok 97 - \&code in list assignment
ok 98 - $scalar in \ternary in list assignment
ok 99 - @gg in \ternary in list assignment
ok 100 - \(@array) in list assignment
ok 101 - cond assignment resolving to scalar ref
ok 102 - cond assignment resolving to scalar
ok 103 - cond assignment with refgens on both branches
ok 104 - \( ?: ) assignment
ok 105 - nested \ternary assignment
ok 106 - foreach \my $a
ok 107 - for \my scoping
ok 108 - foreach \$::a
ok 109 - foreach \my @a [perl \#22335]
ok 110 - foreach \@::a [perl \#22335]
ok 111 - foreach \my %a [perl \#22335]
ok 112 - foreach \%::a [perl \#22335]
ok 113 - foreach \&padcv
ok 114 - foreach \&rv2cv
ok 115 - assigning non-ref
ok 116 - assigning non-scalar ref to scalar ref
ok 117 - assigning non-scalar ref to package scalar ref
ok 118 - assigning non-array ref to array ref
ok 119 - assigning non-array ref to package array ref
ok 120 - assigning non-hash ref to hash ref
ok 121 - assigning non-hash ref to package hash ref
ok 122 - assigning non-code ref to lexical code ref
ok 123 - assigning non-code ref to package code ref
ok 124 - list-assigning non-ref
ok 125 - list-assigning non-scalar ref to scalar ref
ok 126 - list-assigning non-scalar ref to package scalar ref
ok 127 - list-assigning non-array ref to array ref
ok 128 - list-assigning non-array ref to package array ref
ok 129 - list-assigning non-hash ref to hash ref
ok 130 - list-assigning non-hash ref to package hash ref
ok 131 - list-assigning non-code ref to lexical code ref
ok 132 - list-assigning non-code ref to package code ref
ok 133 - Can't modify reference to do block in list assignment
ok 134 - Can't modify ref to some scalar-returning op in list assignment
ok 135 - Can't modify reference to some list-returning op in list assignment
ok 136 - Can't modify ref to some scalar-returning op in scalar assignment
ok 137 - Can't modify \(local @array) in list assignment
ok 138 - Can't modify \local(@array) in list assignment
ok 139 - 'Array deref' error takes prec. over 'local paren' error
ok 140 - Can't modify ref to parenthesized package hash in scalar assignment
ok 141 - Can't modify ref to parenthesized hash ((my %b)) in list assignment
ok 142 - Can't modify ref to parenthesized hash (my(%b)) in list assignment
ok 143 - Can't modify reference to hash dereference in scalar assignment
ok 144 - Can't modify ref to whatever in scalar assignment via cond expr
not ok 145 - lexical alias affects outer closure # TODO
# Failed test 145 - lexical alias affects outer closure at op/lvref.t line 501
#      got "SCALAR(0x4d87ec)"
# expected "SCALAR(0x4d880c)"
not ok 146 - lexical alias affects outer sub where vars are declared # TODO
# Failed test 146 - lexical alias affects outer sub where vars are declared at o
p/lvref.t line 503
#      got "SCALAR(0x4d87ec)"
# expected "SCALAR(0x4d880c)"
not ok 147 - padstale alias should not reset state
ok 148 - no crash when assigning \$lex = $weakref_to_lex
ok 149 - list assignment after aliasing lexical scalars
ok 150 - regular list assignment after aliasing via list assignment
ok 151 - list assignment "before" aliasing lexical scalars
ok 152 - list assignment "before" aliasing lex scalars via list assignment
ok 153 - aelemfast_lex-to-scalar list assignment "before" aliasing
Failed 1/153 subtests

Test Summary Report
-------------------
op/lvref.t (Wstat: 0 Tests: 153 Failed: 1)
  Failed test:  147
Files=1, Tests=153,  0 wallclock secs ( 0.03 usr +  0.02 sys =  0.05 CPU)
Result: FAIL

C:\sources\cperl\win32>
C:\sources\cperl\win32>cd ..\t   & perl harness -v op/signatures.t   & cd ..\win32 
# Failed test 25 - at op/signatures.t line 47
#      got undef
# expected "z"
# Failed test 26 - at op/signatures.t line 48
#      got undef
# expected "456"
# Failed test 37 - at op/signatures.t line 61
#      got undef
# expected "456789"
# Failed test 50 - at op/signatures.t line 76
#      got undef
# expected "456789987"
# Failed test 59 - at op/signatures.t line 87
#      got undef
# expected "456789"
# Failed test 70 - at op/signatures.t line 100
#      got undef
# expected "z"
# Failed test 71 - at op/signatures.t line 101
#      got undef
# expected "456"
# Failed test 82 - at op/signatures.t line 114
#      got undef
# expected "z"
# Failed test 83 - at op/signatures.t line 115
#      got undef
# expected "789"
# Failed test 94 - at op/signatures.t line 128
#      got undef
# expected "123"
# Failed test 95 - at op/signatures.t line 129
#      got undef
# expected "123"
# Failed test 114 - at op/signatures.t line 153
#      got "222"
# expected "0"
# Failed test 115 - at op/signatures.t line 154
#      got "222"
# expected "z"
# Failed test 116 - at op/signatures.t line 155
#      got "222"
# expected "456"
# Failed test 124 - at op/signatures.t line 165
#      got "z"
# expected "0"
# Failed test 126 - at op/signatures.t line 167
#      got "z"
# expected "456"
# Failed test 135 - at op/signatures.t line 179
#      got "222"
# expected "0"
# Failed test 136 - at op/signatures.t line 180
#      got "222"
# expected "z"
# Failed test 137 - at op/signatures.t line 181
#      got "222"
# expected "456"
# Failed test 142 - at op/signatures.t line 186
#      got "4"
# expected "1"
# Failed test 144 - at op/signatures.t line 188
#      got "5"
# expected "2"
# Failed test 149 - at op/signatures.t line 197
#      got "222/333"
# expected "0"
# Failed test 150 - at op/signatures.t line 198
#      got "222/333"
# expected "z"
# Failed test 151 - at op/signatures.t line 199
#      got "222/333"
# expected "456"
# Failed test 156 - at op/signatures.t line 204
#      got "333"
# expected "123"
# Failed test 159 - at op/signatures.t line 209
#      got "222/333"
# expected "0/333"
# Failed test 160 - at op/signatures.t line 210
#      got "222/333"
# expected "456/333"
# Failed test 161 - at op/signatures.t line 211
#      got "222/333"
# expected "456/789"
# Failed test 164 - at op/signatures.t line 214
#      got "333"
# expected "123"
# Failed test 167 - at op/signatures.t line 220
#      got "222z/333"
# expected "0/333"
# Failed test 168 - at op/signatures.t line 221
#      got "222z/333"
# expected "456/333"
# Failed test 169 - at op/signatures.t line 222
#      got "222z/333"
# expected "456/789"
# Failed test 172 - at op/signatures.t line 225
#      got "333"
# expected "123"
# Failed test 176 - at op/signatures.t line 232
#      got "222/333"
# expected "0/333"
# Failed test 177 - at op/signatures.t line 233
#      got "22"
# expected "12"
# Failed test 178 - at op/signatures.t line 234
#      got "222/333"
# expected "456/333"
# Failed test 179 - at op/signatures.t line 235
#      got "33"
# expected "13"
# Failed test 180 - at op/signatures.t line 236
#      got "222/333"
# expected "456/789"
# Failed test 183 - at op/signatures.t line 239
#      got "44"
# expected "13"
# Failed test 184 - at op/signatures.t line 240
#      got "333"
# expected "123"
# Failed test 187 - at op/signatures.t line 245
#      got "azy"
# expected "xaxy"
# Failed test 190 - at op/signatures.t line 248
#      got "333"
# expected "123"
# Failed test 192 - at op/signatures.t line 252
#      got "333xy"
# expected "123xy"
# Failed test 193 - at op/signatures.t line 253
#      got "333xy"
# expected "0y"
# Failed test 194 - at op/signatures.t line 254
#      got "333xy"
# expected "456y"
# Failed test 197 - at op/signatures.t line 257
#      got "333"
# expected "123"
# Failed test 200 - at op/signatures.t line 264
#      got "___"
# expected "z"
# Failed test 201 - at op/signatures.t line 266
#      got "___"
# expected "0"
# Failed test 202 - at op/signatures.t line 268
#      got "___"
# expected "456"
# Failed test 205 - at op/signatures.t line 272
#      got "333"
# expected "123"
# Failed test 208 - at op/signatures.t line 277
#      got "main"
# expected "z"
# Failed test 209 - at op/signatures.t line 278
#      got "main"
# expected "0"
# Failed test 210 - at op/signatures.t line 279
#      got "main"
# expected "456"
# Failed test 214 - at op/signatures.t line 283
#      got "T121::Z"
# expected "z"
# Failed test 215 - at op/signatures.t line 284
#      got "T121::Z"
# expected "0"
# Failed test 216 - at op/signatures.t line 285
#      got "T121::Z"
# expected "456"
# Failed test 219 - at op/signatures.t line 288
#      got "333"
# expected "123"
# Failed test 222 - at op/signatures.t line 293
#      got "222"
# expected "0x"
# Failed test 223 - at op/signatures.t line 294
#      got "222"
# expected "456x"
# Failed test 226 - at op/signatures.t line 297
#      got "333"
# expected "123"
Out of memory!
op/signatures.t .. 
ok 1 - ($a) signature
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10
ok 11
ok 12
ok 13
ok 14
ok 15 - ( ) sig
ok 16
ok 17
ok 18
ok 19
ok 20
ok 21
ok 22 - ($a) sig
ok 23
ok 24
not ok 25
not ok 26
ok 27
ok 28
ok 29
ok 30
ok 31
ok 32
ok 33
ok 34
ok 35
ok 36
not ok 37
ok 38
ok 39
ok 40
ok 41
ok 42
ok 43
ok 44
ok 45
ok 46
ok 47
ok 48
ok 49
not ok 50
ok 51
ok 52
ok 53
ok 54
ok 55
ok 56
ok 57
ok 58
not ok 59
ok 60
ok 61
ok 62
ok 63
ok 64
ok 65 - ($a, $) sig
ok 66
ok 67
ok 68
ok 69
not ok 70
not ok 71
ok 72
ok 73
ok 74
ok 75
ok 76
ok 77
ok 78
ok 79
ok 80
ok 81
not ok 82
not ok 83
ok 84
ok 85
ok 86
ok 87
ok 88
ok 89
ok 90
ok 91
ok 92
ok 93
not ok 94
not ok 95
ok 96
ok 97
ok 98
ok 99
ok 100
ok 101
ok 102
ok 103
ok 104
ok 105
ok 106
ok 107
ok 108
ok 109
ok 110
ok 111
ok 112
ok 113
not ok 114
not ok 115
not ok 116
ok 117
ok 118
ok 119
ok 120
ok 121
ok 122
ok 123
not ok 124
ok 125
not ok 126
ok 127
ok 128
ok 129
ok 130
ok 131
ok 132
ok 133
ok 134
not ok 135
not ok 136
not ok 137
ok 138
ok 139
ok 140
ok 141
not ok 142
ok 143
not ok 144
ok 145
ok 146
ok 147
ok 148
not ok 149
not ok 150
not ok 151
ok 152
ok 153
ok 154
ok 155
not ok 156
ok 157
ok 158
not ok 159
not ok 160
not ok 161
ok 162
ok 163
not ok 164
ok 165
ok 166
not ok 167
not ok 168
not ok 169
ok 170
ok 171
not ok 172
ok 173
ok 174
ok 175
not ok 176
not ok 177
not ok 178
not ok 179
not ok 180
ok 181
ok 182
not ok 183
not ok 184
ok 185
ok 186
not ok 187
ok 188
ok 189
not ok 190
ok 191
not ok 192
not ok 193
not ok 194
ok 195
ok 196
not ok 197
ok 198
ok 199
not ok 200
not ok 201
not ok 202
ok 203
ok 204
not ok 205
ok 206
ok 207
not ok 208
not ok 209
not ok 210
ok 211
ok 212
ok 213
not ok 214
not ok 215
not ok 216
ok 217
ok 218
not ok 219
ok 220
ok 221
not ok 222
not ok 223
ok 224
ok 225
not ok 226
ok 227
Dubious, test returned 1 (wstat 256, 0x100)
Failed 60/227 subtests 

Test Summary Report
-------------------
op/signatures.t (Wstat: 256 Tests: 227 Failed: 60)
  Failed tests:  25-26, 37, 50, 59, 70-71, 82-83, 94-95
                114-116, 124, 126, 135-137, 142, 144, 149-151
                156, 159-161, 164, 167-169, 172, 176-180
                183-184, 187, 190, 192-194, 197, 200-202
                205, 208-210, 214-216, 219, 222-223, 226
  Non-zero exit status: 1
  Parse errors: No plan found in TAP output
Files=1, Tests=227,  8 wallclock secs ( 0.05 usr +  0.00 sys =  0.05 CPU)
Result: FAIL
C:\sources\cperl\win32>cd ..\t   & perl harness -v op/taint.t   & cd ..\win32 
Not enough arguments for subroutine sig1. Want: 4, but got: 0 at op/taint.t line 2438.
# Looks like you planned 882 tests but ran 830.
op/taint.t .. 
1..882
ok 1
ok 2 # skip Environment tainting tests skipped
ok 3 # skip Environment tainting tests skipped
ok 4 # skip Environment tainting tests skipped
ok 5 # skip Environment tainting tests skipped
# all directories are writeable
ok 6 # skip all directories are writeable
ok 7 # skip all directories are writeable
ok 8 # skip This is not VMS
ok 9 # skip This is not VMS
ok 10 # skip This is not VMS
ok 11 # skip This is not VMS
ok 12
ok 13
ok 14
ok 15
ok 16
ok 17
ok 18
ok 19
ok 20
ok 21
ok 22
ok 23
ok 24
ok 25
ok 26
ok 27
ok 28
ok 29
ok 30
ok 31
ok 32
ok 33
ok 34
ok 35
ok 36 - match with string tainted: s tainted
ok 37 - match with string tainted: res not tainted
ok 38 - match with string tainted: $1 not tainted
ok 39 - match with string tainted: res value
ok 40 - match with string tainted: $1 value
ok 41 - match /g with string tainted: s tainted
ok 42 - match /g with string tainted: res not tainted
ok 43 - match /g with string tainted: $1 not tainted
ok 44 - match /g with string tainted: res value
ok 45 - match /g with string tainted: $1 value
ok 46 - match with string tainted, list cxt: s tainted
ok 47 - match with string tainted, list cxt: res not tainted
ok 48 - match with string tainted, list cxt: $1 not tainted
ok 49 - match with string tainted, list cxt: res value
ok 50 - match with string tainted, list cxt: $1 value
ok 51 - match /g with string tainted, list cxt: s tainted
ok 52 - match /g with string tainted, list cxt: res not tainted
ok 53 - match /g with string tainted, list cxt: res2 not tainted
ok 54 - match /g with string tainted, list cxt: $1 not tainted
ok 55 - match /g with string tainted, list cxt: res value
ok 56 - match /g with string tainted, list cxt: res2 value
ok 57 - match /g with string tainted, list cxt: $1 value
ok 58 - match with pattern tainted: s not tainted
ok 59 - match with pattern tainted: res not tainted
ok 60 - match with pattern tainted: $1 tainted
ok 61 - match with pattern tainted: res value
ok 62 - match with pattern tainted: $1 value
ok 63 - match /g with pattern tainted: s not tainted
ok 64 - match /g with pattern tainted: res not tainted
ok 65 - match /g with pattern tainted: $1 tainted
ok 66 - match /g with pattern tainted: res value
ok 67 - match /g with pattern tainted: $1 value
ok 68 - match with pattern tainted via locale: s not tainted
ok 69 - match with pattern tainted via locale: res not tainted
ok 70 - match with pattern tainted via locale: $1 tainted
ok 71 - match with pattern tainted via locale: res value
ok 72 - match with pattern tainted via locale: $1 value
ok 73 - match /g with pattern tainted via locale: s not tainted
ok 74 - match /g with pattern tainted via locale: res not tainted
ok 75 - match /g with pattern tainted via locale: $1 tainted
ok 76 - match /g with pattern tainted via locale: res value
ok 77 - match /g with pattern tainted via locale: $1 value
ok 78 - match with pattern tainted, list cxt: s not tainted
ok 79 - match with pattern tainted, list cxt: res tainted
ok 80 - match with pattern tainted, list cxt: $1 tainted
ok 81 - match with pattern tainted, list cxt: res value
ok 82 - match with pattern tainted, list cxt: $1 value
ok 83 - match /g with pattern tainted, list cxt: s not tainted
ok 84 - match /g with pattern tainted, list cxt: res tainted
ok 85 - match /g with pattern tainted, list cxt: $1 tainted
ok 86 - match /g with pattern tainted, list cxt: res value
ok 87 - match /g with pattern tainted, list cxt: res2 value
ok 88 - match /g with pattern tainted, list cxt: $1 value
ok 89 - match with pattern tainted via locale, list cxt: s not tainted
ok 90 - match with pattern tainted via locale, list cxt: res tainted
ok 91 - match with pattern tainted via locale, list cxt: $1 tainted
ok 92 - match with pattern tainted via locale, list cxt: res value
ok 93 - match with pattern tainted via locale, list cxt: $1 value
ok 94 - match /g with pattern tainted via locale, list cxt: s not tainted
ok 95 - match /g with pattern tainted via locale, list cxt: res tainted
ok 96 - match /g with pattern tainted via locale, list cxt: res2 tainted
ok 97 - match /g with pattern tainted via locale, list cxt: $1 tainted
ok 98 - match /g with pattern tainted via locale, list cxt: res value
ok 99 - match /g with pattern tainted via locale, list cxt: res2 value
ok 100 - match /g with pattern tainted via locale, list cxt: $1 value
ok 101 - substitution with string tainted: s tainted
ok 102 - substitution with string tainted: res not tainted
ok 103 - substitution with string tainted: $1 not tainted
ok 104 - substitution with string tainted: s value
ok 105 - substitution with string tainted: res value
ok 106 - substitution with string tainted: $1 value
ok 107 - substitution /g with string tainted: s tainted
ok 108 - substitution /g with string tainted: res tainted
ok 109 - substitution /g with string tainted: $1 not tainted
ok 110 - substitution /g with string tainted: s value
ok 111 - substitution /g with string tainted: res value
ok 112 - substitution /g with string tainted: $1 value
ok 113 - substitution /r with string tainted: s tainted
ok 114 - substitution /r with string tainted: res tainted
ok 115 - substitution /r with string tainted: $1 not tainted
ok 116 - substitution /r with string tainted: s value
ok 117 - substitution /r with string tainted: res value
ok 118 - substitution /r with string tainted: $1 value
ok 119 - substitution /e with string tainted: code not tainted within /e
ok 120 - substitution /e with string tainted: $1 not tainted within /e
ok 121 - substitution /e with string tainted: s tainted
ok 122 - substitution /e with string tainted: res not tainted
ok 123 - substitution /e with string tainted: $1 not tainted
ok 124 - substitution /e with string tainted: s value
ok 125 - substitution /e with string tainted: res value
ok 126 - substitution /e with string tainted: $1 value
ok 127 - substitution with pattern tainted: s tainted
ok 128 - substitution with pattern tainted: res not tainted
ok 129 - substitution with pattern tainted: $1 tainted
ok 130 - substitution with pattern tainted: s value
ok 131 - substitution with pattern tainted: res value
ok 132 - substitution with pattern tainted: $1 value
ok 133 - substitution /g with pattern tainted: s tainted
ok 134 - substitution /g with pattern tainted: res tainted
ok 135 - substitution /g with pattern tainted: $1 tainted
ok 136 - substitution /g with pattern tainted: s value
ok 137 - substitution /g with pattern tainted: res value
ok 138 - substitution /g with pattern tainted: $1 value
ok 139 - substitution /ge with pattern tainted: code not tainted within /e
ok 140 - substitution /ge with pattern tainted: s not tainted loop 1
ok 141 - substitution /ge with pattern tainted: $1 tainted loop 1
ok 142 - substitution /ge with pattern tainted: code not tainted within /e
ok 143 - substitution /ge with pattern tainted: s tainted loop 2
ok 144 - substitution /ge with pattern tainted: $1 tainted loop 2
ok 145 - substitution /ge with pattern tainted: code not tainted within /e
ok 146 - substitution /ge with pattern tainted: s tainted loop 3
ok 147 - substitution /ge with pattern tainted: $1 tainted loop 3
ok 148 - substitution /ge with pattern tainted: s tainted
ok 149 - substitution /ge with pattern tainted: res tainted
ok 150 - substitution /ge with pattern tainted: $1 tainted
ok 151 - substitution /ge with pattern tainted: s value
ok 152 - substitution /ge with pattern tainted: res value
ok 153 - substitution /ge with pattern tainted: $1 value
ok 154 - substitution /r with pattern tainted: s not tainted
ok 155 - substitution /r with pattern tainted: res tainted
ok 156 - substitution /r with pattern tainted: $1 tainted
ok 157 - substitution /r with pattern tainted: s value
ok 158 - substitution /r with pattern tainted: res value
ok 159 - substitution /r with pattern tainted: $1 value
ok 160 - substitution with pattern tainted via locale: s tainted
ok 161 - substitution with pattern tainted via locale: res not tainted
ok 162 - substitution with pattern tainted via locale: $1 tainted
ok 163 - substitution with pattern tainted via locale: s value
ok 164 - substitution with pattern tainted via locale: res value
ok 165 - substitution with pattern tainted via locale: $1 value
ok 166 - substitution /g with pattern tainted via locale: s tainted
ok 167 - substitution /g with pattern tainted via locale: res tainted
ok 168 - substitution /g with pattern tainted via locale: $1 tainted
ok 169 - substitution /g with pattern tainted via locale: s value
ok 170 - substitution /g with pattern tainted via locale: res value
ok 171 - substitution /g with pattern tainted via locale: $1 value
ok 172 - substitution /r with pattern tainted via locale: s not tainted
ok 173 - substitution /r with pattern tainted via locale: res tainted
ok 174 - substitution /r with pattern tainted via locale: $1 tainted
ok 175 - substitution /r with pattern tainted via locale: s value
ok 176 - substitution /r with pattern tainted via locale: res value
ok 177 - substitution /r with pattern tainted via locale: $1 value
ok 178 - substitution with replacement tainted: s tainted
ok 179 - substitution with replacement tainted: res not tainted
ok 180 - substitution with replacement tainted: $1 not tainted
ok 181 - substitution with replacement tainted: s value
ok 182 - substitution with replacement tainted: res value
ok 183 - substitution with replacement tainted: $1 value
ok 184 - substitution /g with replacement tainted: s tainted
ok 185 - substitution /g with replacement tainted: res not tainted
ok 186 - substitution /g with replacement tainted: $1 not tainted
ok 187 - substitution /g with replacement tainted: s value
ok 188 - substitution /g with replacement tainted: res value
ok 189 - substitution /g with replacement tainted: $1 value
ok 190 - substitution /ge with replacement tainted: code not tainted within /e
ok 191 - substitution /ge with replacement tainted: s not tainted loop 1
ok 192 - substitution /ge with replacement tainted: $1 not tainted within /e
ok 193 - substitution /ge with replacement tainted: code not tainted within /e
ok 194 - substitution /ge with replacement tainted: s tainted loop 2
ok 195 - substitution /ge with replacement tainted: $1 not tainted within /e
ok 196 - substitution /ge with replacement tainted: code not tainted within /e
ok 197 - substitution /ge with replacement tainted: s tainted loop 3
ok 198 - substitution /ge with replacement tainted: $1 not tainted within /e
ok 199 - substitution /ge with replacement tainted: s tainted
ok 200 - substitution /ge with replacement tainted: res tainted
ok 201 - substitution /ge with replacement tainted: $1 not tainted
ok 202 - substitution /ge with replacement tainted: s value
ok 203 - substitution /ge with replacement tainted: res value
ok 204 - substitution /ge with replacement tainted: $1 value
ok 205 - substitution /r with replacement tainted: s not tainted
ok 206 - substitution /r with replacement tainted: res tainted
ok 207 - substitution /r with replacement tainted: $1 not tainted
ok 208 - substitution /r with replacement tainted: s value
ok 209 - substitution /r with replacement tainted: res value
ok 210 - substitution /r with replacement tainted: $1 value
ok 211 - use re 'taint': match with string tainted: s tainted
ok 212 - use re 'taint': match with string tainted: res not tainted
ok 213 - use re 'taint': match with string tainted: $1 tainted
ok 214 - use re 'taint': match with string tainted: res value
ok 215 - use re 'taint': match with string tainted: $1 value
ok 216 - use re 'taint': match /g with string tainted: s tainted
ok 217 - use re 'taint': match /g with string tainted: res not tainted
ok 218 - use re 'taint': match /g with string tainted: $1 tainted
ok 219 - use re 'taint': match /g with string tainted: res value
ok 220 - use re 'taint': match /g with string tainted: $1 value
ok 221 - use re 'taint': match with string tainted, list cxt: s tainted
ok 222 - use re 'taint': match with string tainted, list cxt: res tainted
ok 223 - use re 'taint': match with string tainted, list cxt: $1 tainted
ok 224 - use re 'taint': match with string tainted, list cxt: res value
ok 225 - use re 'taint': match with string tainted, list cxt: $1 value
ok 226 - use re 'taint': match /g with string tainted, list cxt: s tainted
ok 227 - use re 'taint': match /g with string tainted, list cxt: res tainted
ok 228 - use re 'taint': match /g with string tainted, list cxt: res2 tainted
ok 229 - use re 'taint': match /g with string tainted, list cxt: $1 not tainted
ok 230 - use re 'taint': match /g with string tainted, list cxt: res value
ok 231 - use re 'taint': match /g with string tainted, list cxt: res2 value
ok 232 - use re 'taint': match /g with string tainted, list cxt: $1 value
ok 233 - use re 'taint': match with pattern tainted: s not tainted
ok 234 - use re 'taint': match with pattern tainted: res not tainted
ok 235 - use re 'taint': match with pattern tainted: $1 tainted
ok 236 - use re 'taint': match with pattern tainted: res value
ok 237 - use re 'taint': match with pattern tainted: $1 value
ok 238 - use re 'taint': match /g with pattern tainted: s not tainted
ok 239 - use re 'taint': match /g with pattern tainted: res not tainted
ok 240 - use re 'taint': match /g with pattern tainted: $1 tainted
ok 241 - use re 'taint': match /g with pattern tainted: res value
ok 242 - use re 'taint': match /g with pattern tainted: $1 value
ok 243 - use re 'taint': match with pattern tainted via locale: s not tainted
ok 244 - use re 'taint': match with pattern tainted via locale: res not tainted
ok 245 - use re 'taint': match with pattern tainted via locale: $1 tainted
ok 246 - use re 'taint': match with pattern tainted via locale: res value
ok 247 - use re 'taint': match with pattern tainted via locale: $1 value
ok 248 - use re 'taint': match /g with pattern tainted via locale: s not tainted
ok 249 - use re 'taint': match /g with pattern tainted via locale: res not tainted
ok 250 - use re 'taint': match /g with pattern tainted via locale: $1 tainted
ok 251 - use re 'taint': match /g with pattern tainted via locale: res value
ok 252 - use re 'taint': match /g with pattern tainted via locale: $1 value
ok 253 - use re 'taint': match with pattern tainted, list cxt: s not tainted
ok 254 - use re 'taint': match with pattern tainted, list cxt: res tainted
ok 255 - use re 'taint': match with pattern tainted, list cxt: $1 tainted
ok 256 - use re 'taint': match with pattern tainted, list cxt: res value
ok 257 - use re 'taint': match with pattern tainted, list cxt: $1 value
ok 258 - use re 'taint': match /g with pattern tainted, list cxt: s not tainted
ok 259 - use re 'taint': match /g with pattern tainted, list cxt: res tainted
ok 260 - use re 'taint': match /g with pattern tainted, list cxt: $1 tainted
ok 261 - use re 'taint': match /g with pattern tainted, list cxt: res value
ok 262 - use re 'taint': match /g with pattern tainted, list cxt: res2 value
ok 263 - use re 'taint': match /g with pattern tainted, list cxt: $1 value
ok 264 - use re 'taint': match with pattern tainted via locale, list cxt: s not tainted
ok 265 - use re 'taint': match with pattern tainted via locale, list cxt: res tainted
ok 266 - use re 'taint': match with pattern tainted via locale, list cxt: $1 tainted
ok 267 - use re 'taint': match with pattern tainted via locale, list cxt: res value
ok 268 - use re 'taint': match with pattern tainted via locale, list cxt: $1 value
ok 269 - use re 'taint': match /g with pattern tainted via locale, list cxt: s not tainted
ok 270 - use re 'taint': match /g with pattern tainted via locale, list cxt: res tainted
ok 271 - use re 'taint': match /g with pattern tainted via locale, list cxt: res2 tainted
ok 272 - use re 'taint': match /g with pattern tainted via locale, list cxt: $1 tainted
ok 273 - use re 'taint': match /g with pattern tainted via locale, list cxt: res value
ok 274 - use re 'taint': match /g with pattern tainted via locale, list cxt: res2 value
ok 275 - use re 'taint': match /g with pattern tainted via locale, list cxt: $1 value
ok 276 - use re 'taint': substitution with string tainted: s tainted
ok 277 - use re 'taint': substitution with string tainted: res not tainted
ok 278 - use re 'taint': substitution with string tainted: $1 tainted
ok 279 - use re 'taint': substitution with string tainted: s value
ok 280 - use re 'taint': substitution with string tainted: res value
ok 281 - use re 'taint': substitution with string tainted: $1 value
ok 282 - use re 'taint': substitution /g with string tainted: s tainted
ok 283 - use re 'taint': substitution /g with string tainted: res tainted
ok 284 - use re 'taint': substitution /g with string tainted: $1 tainted
ok 285 - use re 'taint': substitution /g with string tainted: s value
ok 286 - use re 'taint': substitution /g with string tainted: res value
ok 287 - use re 'taint': substitution /g with string tainted: $1 value
ok 288 - use re 'taint': substitution /r with string tainted: s tainted
ok 289 - use re 'taint': substitution /r with string tainted: res tainted
ok 290 - use re 'taint': substitution /r with string tainted: $1 tainted
ok 291 - use re 'taint': substitution /r with string tainted: s value
ok 292 - use re 'taint': substitution /r with string tainted: res value
ok 293 - use re 'taint': substitution /r with string tainted: $1 value
ok 294 - use re 'taint': substitution /e with string tainted: code not tainted within /e
ok 295 - use re 'taint': substitution /e with string tainted: abcd tainted within /e
ok 296 - use re 'taint': substitution /e with string tainted: s tainted
ok 297 - use re 'taint': substitution /e with string tainted: res not tainted
ok 298 - use re 'taint': substitution /e with string tainted: $1 tainted
ok 299 - use re 'taint': substitution /e with string tainted: s value
ok 300 - use re 'taint': substitution /e with string tainted: res value
ok 301 - use re 'taint': substitution /e with string tainted: $1 value
ok 302 - use re 'taint': substitution with pattern tainted: s tainted
ok 303 - use re 'taint': substitution with pattern tainted: res not tainted
ok 304 - use re 'taint': substitution with pattern tainted: $1 tainted
ok 305 - use re 'taint': substitution with pattern tainted: s value
ok 306 - use re 'taint': substitution with pattern tainted: res value
ok 307 - use re 'taint': substitution with pattern tainted: $1 value
ok 308 - use re 'taint': substitution /g with pattern tainted: s tainted
ok 309 - use re 'taint': substitution /g with pattern tainted: res tainted
ok 310 - use re 'taint': substitution /g with pattern tainted: $1 tainted
ok 311 - use re 'taint': substitution /g with pattern tainted: s value
ok 312 - use re 'taint': substitution /g with pattern tainted: res value
ok 313 - use re 'taint': substitution /g with pattern tainted: $1 value
ok 314 - use re 'taint': substitution /ge with pattern tainted: code not tainted within /e
ok 315 - use re 'taint': substitution /ge with pattern tainted: s not tainted loop 1
ok 316 - use re 'taint': substitution /ge with pattern tainted: $1 tainted loop 1
ok 317 - use re 'taint': substitution /ge with pattern tainted: code not tainted within /e
ok 318 - use re 'taint': substitution /ge with pattern tainted: s tainted loop 2
ok 319 - use re 'taint': substitution /ge with pattern tainted: $1 tainted loop 2
ok 320 - use re 'taint': substitution /ge with pattern tainted: code not tainted within /e
ok 321 - use re 'taint': substitution /ge with pattern tainted: s tainted loop 3
ok 322 - use re 'taint': substitution /ge with pattern tainted: $1 tainted loop 3
ok 323 - use re 'taint': substitution /ge with pattern tainted: s tainted
ok 324 - use re 'taint': substitution /ge with pattern tainted: res tainted
ok 325 - use re 'taint': substitution /ge with pattern tainted: $1 tainted
ok 326 - use re 'taint': substitution /ge with pattern tainted: s value
ok 327 - use re 'taint': substitution /ge with pattern tainted: res value
ok 328 - use re 'taint': substitution /ge with pattern tainted: $1 value
ok 329 - use re 'taint': substitution /r with pattern tainted: s not tainted
ok 330 - use re 'taint': substitution /r with pattern tainted: res tainted
ok 331 - use re 'taint': substitution /r with pattern tainted: $1 tainted
ok 332 - use re 'taint': substitution /r with pattern tainted: s value
ok 333 - use re 'taint': substitution /r with pattern tainted: res value
ok 334 - use re 'taint': substitution /r with pattern tainted: $1 value
ok 335 - use re 'taint': substitution with pattern tainted via locale: s tainted
ok 336 - use re 'taint': substitution with pattern tainted via locale: res not tainted
ok 337 - use re 'taint': substitution with pattern tainted via locale: $1 tainted
ok 338 - use re 'taint': substitution with pattern tainted via locale: s value
ok 339 - use re 'taint': substitution with pattern tainted via locale: res value
ok 340 - use re 'taint': substitution with pattern tainted via locale: $1 value
ok 341 - use re 'taint': substitution /g with pattern tainted via locale: s tainted
ok 342 - use re 'taint': substitution /g with pattern tainted via locale: res tainted
ok 343 - use re 'taint': substitution /g with pattern tainted via locale: $1 tainted
ok 344 - use re 'taint': substitution /g with pattern tainted via locale: s value
ok 345 - use re 'taint': substitution /g with pattern tainted via locale: res value
ok 346 - use re 'taint': substitution /g with pattern tainted via locale: $1 value
ok 347 - use re 'taint': substitution /r with pattern tainted via locale: s not tainted
ok 348 - use re 'taint': substitution /r with pattern tainted via locale: res tainted
ok 349 - use re 'taint': substitution /r with pattern tainted via locale: $1 tainted
ok 350 - use re 'taint': substitution /r with pattern tainted via locale: s value
ok 351 - use re 'taint': substitution /r with pattern tainted via locale: res value
ok 352 - use re 'taint': substitution /r with pattern tainted via locale: $1 value
ok 353 - use re 'taint': substitution with replacement tainted: s tainted
ok 354 - use re 'taint': substitution with replacement tainted: res not tainted
ok 355 - use re 'taint': substitution with replacement tainted: $1 not tainted
ok 356 - use re 'taint': substitution with replacement tainted: s value
ok 357 - use re 'taint': substitution with replacement tainted: res value
ok 358 - use re 'taint': substitution with replacement tainted: $1 value
ok 359 - use re 'taint': substitution /g with replacement tainted: s tainted
ok 360 - use re 'taint': substitution /g with replacement tainted: res not tainted
ok 361 - use re 'taint': substitution /g with replacement tainted: $1 not tainted
ok 362 - use re 'taint': substitution /g with replacement tainted: s value
ok 363 - use re 'taint': substitution /g with replacement tainted: res value
ok 364 - use re 'taint': substitution /g with replacement tainted: $1 value
ok 365 - use re 'taint': substitution /ge with replacement tainted: code not tainted within /e
ok 366 - use re 'taint': substitution /ge with replacement tainted: s not tainted loop 1
ok 367 - use re 'taint': substitution /ge with replacement tainted: $1 not tainted
ok 368 - use re 'taint': substitution /ge with replacement tainted: code not tainted within /e
ok 369 - use re 'taint': substitution /ge with replacement tainted: s tainted loop 2
ok 370 - use re 'taint': substitution /ge with replacement tainted: $1 not tainted
ok 371 - use re 'taint': substitution /ge with replacement tainted: code not tainted within /e
ok 372 - use re 'taint': substitution /ge with replacement tainted: s tainted loop 3
ok 373 - use re 'taint': substitution /ge with replacement tainted: $1 not tainted
ok 374 - use re 'taint': substitution /ge with replacement tainted: s tainted
ok 375 - use re 'taint': substitution /ge with replacement tainted: res tainted
ok 376 - use re 'taint': substitution /ge with replacement tainted: $1 not tainted
ok 377 - use re 'taint': substitution /ge with replacement tainted: s value
ok 378 - use re 'taint': substitution /ge with replacement tainted: res value
ok 379 - use re 'taint': substitution /ge with replacement tainted: $1 value
ok 380 - use re 'taint': substitution /r with replacement tainted: s not tainted
ok 381 - use re 'taint': substitution /r with replacement tainted: res tainted
ok 382 - use re 'taint': substitution /r with replacement tainted: $1 not tainted
ok 383 - use re 'taint': substitution /r with replacement tainted: s value
ok 384 - use re 'taint': substitution /r with replacement tainted: res value
ok 385 - use re 'taint': substitution /r with replacement tainted: $1 value
ok 386 - 121854: res tainted
ok 387 - 121854: res not tainted
ok 388
ok 389
ok 390
ok 391
ok 392
ok 393 - Exited with status 0
ok 394
ok 395
ok 396
ok 397
ok 398
ok 399
ok 400
ok 401
ok 402
ok 403
ok 404
ok 405
ok 406
ok 407
ok 408
ok 409
ok 410
ok 411
ok 412
ok 413 - chmod
ok 414
ok 415 # skip truncate() is not available
ok 416 # skip truncate() is not available
ok 417 - rename
ok 418
ok 419 - unlink
ok 420
ok 421 - utime
ok 422
ok 423 # skip chown() is not available
ok 424 # skip chown() is not available
ok 425 - link
ok 426
ok 427 # skip symlink() is not available
ok 428 # skip symlink() is not available
ok 429 - mkdir
ok 430
ok 431 - rmdir
ok 432
ok 433 - chdir
ok 434
ok 435 # skip chroot() is not available
ok 436 # skip chroot() is not available
ok 437 - require
ok 438
ok 439 - open for read
ok 440
ok 441 - open for read
ok 442
ok 443
ok 444 - open for write
ok 445
ok 446 - open for write
ok 447
ok 448 - popen to
ok 449
ok 450 - popen from
ok 451
ok 452 - popen to
ok 453
ok 454 - popen from
ok 455
ok 456 - exec
ok 457
ok 458 - system
ok 459
ok 460 - backticks
ok 461
ok 462 # skip This is not VMS
ok 463 # skip This is not VMS
ok 464 - kill
ok 465
ok 466 # skip setpgrp() is not available
ok 467 # skip setpgrp() is not available
ok 468 # skip setpriority() is not available
ok 469 # skip setpriority() is not available
ok 470 # skip syscall() is not available
ok 471 # skip syscall() is not available
ok 472
ok 473 - ioctl
ok 474
ok 475
ok 476 - ioctl
ok 477
ok 478 # skip fcntl() is not available
ok 479 # skip fcntl() is not available
ok 480 # skip fcntl() is not available
ok 481 # skip fcntl() is not available
ok 482
ok 483
ok 484
ok 485
ok 486
ok 487
ok 488
ok 489
ok 490
ok 491
ok 492
ok 493
ok 494
ok 495
ok 496
ok 497
ok 498
ok 499
ok 500
ok 501
ok 502
ok 503
ok 504
ok 505
ok 506
ok 507
ok 508
ok 509
ok 510
ok 511
ok 512
ok 513
ok 514
ok 515
ok 516
ok 517
ok 518
ok 519
ok 520
ok 521
ok 522
ok 523
ok 524 # skip getpwent() is not available
ok 525 # skip getpwent() is not available
ok 526 # skip getpwent() is not available
ok 527 # skip getpwent() is not available
ok 528 # skip getpwent() is not available
ok 529 # skip getpwent() is not available
ok 530 # skip getpwent() is not available
ok 531 # skip getpwent() is not available
ok 532 # skip getpwent() is not available
ok 533
ok 534 # skip readlink() or symlink() is not available
ok 535
ok 536
ok 537
ok 538
ok 539
ok 540 # skip no IPC::SysV
ok 541 # skip no IPC::SysV
ok 542
ok 543
ok 544
ok 545
ok 546
ok 547
ok 548
ok 549
ok 550
ok 551
ok 552
ok 553
ok 554
ok 555 - sysopen
ok 556
ok 557 - sysopen
ok 558
ok 559 - sysopen
ok 560
ok 561 - sysopen
ok 562
ok 563 - sysopen
ok 564
ok 565
ok 566
ok 567 - sysopen
ok 568
ok 569 - sysopen
ok 570
ok 571 - sysopen
ok 572
ok 573 - sysopen
ok 574
ok 575 - sysopen
ok 576
ok 577
ok 578
ok 579 - sysopen
ok 580
ok 581 - sysopen
ok 582
ok 583 - sysopen
ok 584
ok 585 - sysopen
ok 586
ok 587 - sysopen
ok 588
ok 589
ok 590
ok 591
ok 592 - $^TAINT is on
ok 593 - $^TAINT is not assignable
ok 594 - Assigning to ${^TAINT} fails
ok 595
ok 596
ok 597
ok 598 # skip system {} has different semantics on Win32
ok 599 - exec
ok 600
ok 601 - exec
ok 602
ok 603 - exec
ok 604
ok 605 - exec
ok 606
ok 607 - exec
ok 608
ok 609 - system
ok 610
ok 611 - system
ok 612
ok 613 - system
ok 614
ok 615 - system
ok 616
ok 617 - system
ok 618
ok 619
ok 620
ok 621
ok 622
ok 623
ok 624
ok 625
ok 626
ok 627
ok 628
ok 629
ok 630
ok 631
ok 632
ok 633
ok 634
ok 635
ok 636
ok 637
ok 638
ok 639
ok 640
ok 641
ok 642
ok 643
ok 644
ok 645
ok 646
ok 647
ok 648
ok 649
ok 650
ok 651
ok 652
ok 653
ok 654
ok 655
ok 656
ok 657
ok 658
ok 659
ok 660
ok 661
ok 662
ok 663
ok 664 - infinite m//g on arrays (aelemfast)
ok 665 - infinite m//g on arrays (aelem)
ok 666 - infinite m//g on hashes (helem)
ok 667 - Arithmetic on tainted dualvars works
ok 668 # skip fork() is not available
ok 669 # skip fork() is not available
ok 670 # skip fork() is not available
ok 671 - $AUTOLOAD can be untainted
ok 672 - $AUTOLOAD can be untainted
ok 673 - $AUTOLOAD can be tainted
ok 674 - $AUTOLOAD can be tainted
ok 675 - $AUTOLOAD can be untainted
ok 676 - $AUTOLOAD can be untainted
ok 677 - printf doesn't like tainted formats
ok 678
ok 679 - printf doesn't like tainted format expressions
ok 680
# foo
ok 681 - printf accepts other tainted args
ok 682 - sprintf doesn't like tainted formats
ok 683
ok 684 - sprintf doesn't like tainted format expressions
ok 685
ok 686 - sprintf accepts other tainted args
ok 687 - Assignment to untainted variable
ok 688 - Assignment to tainted variable
ok 689 - eval doesn't like tainted strings
ok 690
ok 691
ok 692
ok 693 - \S match with chr 78
ok 694
ok 695 - \S match with chr 163
ok 696
ok 697 - \S match with chr 256
ok 698 - tainted crypt
ok 699 - untainted crypt
ok 700 - tainted complement
ok 701 - untainted complement
ok 702 - tainted data
ok 703 - tainted result 0
ok 704 - correct content 0
ok 705 - tainted result 1
ok 706 - correct content 1
ok 707 - tainted result 2
ok 708 - correct content 2
ok 709 - tainted result 3
ok 710 - correct content 3
ok 711 - still tainted data
ok 712 - tainted result 0
ok 713 - correct content 0
ok 714 - tainted result 1
ok 715 - correct content 1
ok 716 - tainted result 2
ok 717 - correct content 2
ok 718 - tainted result 3
ok 719 - correct content 3
ok 720 - still tainted data
ok 721 - tainted result 0
ok 722 - correct content 0
ok 723 - tainted result 1
ok 724 - correct content 1
ok 725 - tainted result 2
ok 726 - correct content 2
ok 727 - tainted result 3
ok 728 - correct content 3
ok 729 - pack a* preserves tainting
ok 730 - pack A* preserves tainting
ok 731 - pack a*a* preserves tainting
ok 732 - tainted $!
ok 733 - tied arg1 tainted
ok 734 - tied arg2 tainted
ok 735 - tied arg1 tainted
ok 736 - tied arg2 tainted
ok 737 - tied STORE called correct number of times
ok 738 - sprintf '%s', '', '0'
ok 739 - sprintf ' %s', '', '0'
ok 740 - sprintf '%s%s', '', '0'
ok 741 - sprintf '%s', '', '456'
ok 742 - sprintf ' %s', '', '456'
ok 743 - sprintf '%s%s', '', '456'
ok 744 - sprintf '%s', '123', '0'
ok 745 - sprintf ' %s', '123', '0'
ok 746 - sprintf '%s%s', '123', '0'
ok 747 - sprintf '%s', '123', '456'
ok 748 - sprintf ' %s', '123', '456'
ok 749 - sprintf '%s%s', '123', '456'
ok 750 - $1 should be tainted
ok 751 - $untainted should be untainted
ok 752 - $untainted should still be untainted
ok 753 - $untainted should yet still be untainted
ok 754 - formline survives a tainted dynamic picture
ok 755 - format accumulator not tainted yet
ok 756 - tainted formline argument makes a tainted accumulator
ok 757 - accumulator can be explicitly untainted
ok 758 - accumulator still untainted
ok 759 - accumulator can be explicitly tainted
ok 760 - accumulator still tainted
ok 761 - accumulator untainted again
ok 762 - accumulator still untainted
ok 763 - the accumulator should be tainted already
ok 764 - tainted formline picture makes a tainted accumulator
ok 765 - regex optimization of single char /[]/i doesn't taint
ok 766 - regex optimization of single char /[]/i doesn't taint
ok 767 - RT 81230
ok 768 - Constants folded value not tainted
ok 769 - match bare regex
ok 770 - match bare regex taint
ok 771 - match bare regex taint value
ok 772 - user-defined property: non-tainted case
ok 773 - user-defined property: tainted case
ok 774 - lc(tainted) taints its return value
ok 775 - lcfirst(tainted) taints its return value
ok 776 - uc(tainted) taints its return value
ok 777 - ucfirst(tainted) taints its return value
ok 778 - tainted value returned from when is correct
ok 779 - tainted value returned from when stays tainted
ok 780 - tainted value returned from given end is correct
ok 781 - tainted value returned from given end stays tainted
ok 782 - tainted value returned from default is correct
ok 783 - tainted value returned from default stays tainted
ok 784 - initial taintedness
ok 785 - constant is tainted properly
ok 786 - tainting not broken yet
ok 787 - tainting still works after index() of the constant
ok 788 - $tainted ~~ ["whatever", "match"]
ok 789 - $tainted ~~ ["whatever", undef]
ok 790 - no death when TARG of ref is tainted
ok 791 - PID not tainted initially
ok 792 - PID not tainted when read in tainted expression
ok 793 - under locale, lc(latin1) taints the result
ok 794 - under locale, lc(utf8) taints the result
ok 795 - under locale, \Flatin1 taints the result
ok 796 - under locale, \Futf8 taints the result
ok 797 - error should be propagated
ok 798 - tainted (?{})
ok 799 - reset does not taint undef
ok 800 - tainted constant as logop condition should not prevent "use"
ok 801 - + SETi
ok 802 - - SETi
ok 803 - * SETi
ok 804 - + SETn
ok 805 - - SETn
ok 806 - * SETn
ok 807 - sig0 t1
ok 808 - sig0 u1
ok 809 - sig0 t2
ok 810 - sig0 u2
ok 811 - sig0 t3
ok 812 - sig0 u3
ok 813 - sig0 t4
ok 814 - sig0 u4
ok 815 - sig0 t5
ok 816 - sig0 u5
ok 817 - sig0 t6
ok 818 - sig0 u6
ok 819 - sig0 t1
ok 820 - sig0 u1
ok 821 - sig0 t2
ok 822 - sig0 u2
ok 823 - sig0 t3
ok 824 - sig0 u3
ok 825 - sig0 t4
ok 826 - sig0 u4
ok 827 - sig0 t5
ok 828 - sig0 u5
ok 829 - sig0 t6
ok 830 - sig0 u6
Dubious, test returned 255 (wstat 65280, 0xff00)
Failed 52/882 subtests 
    (less 46 skipped subtests: 784 okay)

Test Summary Report
-------------------
op/taint.t (Wstat: 65280 Tests: 830 Failed: 0)
  Non-zero exit status: 255
  Parse errors: Bad plan.  You planned 882 tests but ran 830.
Files=1, Tests=830,  1 wallclock secs ( 0.11 usr +  0.00 sys =  0.11 CPU)
Result: FAIL
C:\sources\cperl\win32>cd ..\t   & perl harness -v op/tie.t   & cd ..\win32
op/tie.t ..
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10
ok 11
ok 12
ok 13
ok 14
ok 15
ok 16
ok 17
# PROG:
#
# my $destroyed = 0;
# sub Self3::TIEHANDLE { bless $_[1], $_[0] }
# sub Self3::DESTROY   { $destroyed = 1; }
# sub Self3::PRINT     { $printed = 1; }
# {
#     use Symbol 'geniosym';
#     my $c = geniosym;
#     tie *$c, 'Self3', \*$c;
#     print $c 'Hello';
# }
# die "IO tied to TEMP glob not PRINTed" unless $printed == 1;
# die "IO tied to TEMP glob not DESTROYed" unless $destroyed == 1;
# EXPECTED:
#
# GOT:
# Can't call method "PRINT" on an undefined value at - line 10.
not ok 18 # TODO IO "self-tie" via TEMP glob
# Failed test 18 - at op/tie.t line 18
ok 19
ok 20
ok 21
ok 22
ok 23
ok 24
ok 25
ok 26
ok 27
ok 28
ok 29
ok 30
ok 31
ok 32
ok 33
ok 34
ok 35
ok 36
ok 37
ok 38
ok 39
ok 40
ok 41
ok 42
ok 43
ok 44
ok 45
ok 46
ok 47
ok 48
ok 49
ok 50
ok 51
ok 52
ok 53
ok 54
ok 55
ok 56
ok 57
ok 58
ok 59
ok 60
ok 61
ok 62
ok 63
ok 64
ok 65
ok 66
ok 67
ok 68
ok 69
ok 70
ok 71
ok 72 - Test that tying a hash does not leak a deleted iterator
ok 73 - EXISTS on arrays
ok 74
ok 75
ok 76
ok 77
ok 78
ok 79
ok 80
ok 81
ok 82
1..82
ok
All tests successful.
Files=1, Tests=82,  3 wallclock secs ( 0.09 usr +  0.02 sys =  0.11 CPU)
Result: PASS

C:\sources\cperl\win32>
C:\sources\cperl\win32>cd ..\t   & perl harness -v perf/benchmarks.t   & cd ..\w
in32
perf/benchmarks.t .. # Failed test 96 - running call::sub::sig_3_params_1_arg_ a
t perf/benchmarks.t line 53
# code:
# package call::sub::sig_3_params_1_arg_;
#                     no warnings "experimental::signatures";
#                     use feature "signatures";
#                     my $self = {}; sub sig ($a, $b = 1, $c = 2) {}; for (1..1)
 { sig($self) } 1;
# gave:
# Not enough arguments for subroutine call::sub::sig_3_params_1_arg_::sig. Want:
 1, but got: 0 at (eval 10) line 4.
# Failed test 97 - running call::sub::sig_3_params_1_arg_expr at perf/benchmarks
.t line 53
# code:
# package call::sub::sig_3_params_1_arg_expr;
#                     no warnings "experimental::signatures";
#                     use feature "signatures";
#                     my $self = {}; sub sig ($a, $b = $a+1, $c = $b++) {}; for
(1..1) { sig($self) } 1;
# gave:
# Not enough arguments for subroutine call::sub::sig_3_params_1_arg_expr::sig. W
ant: 1, but got: 0 at (eval 11) line 4.
# Failed test 98 - running call::sub::sig_3_params_1_arg_lexpkg at perf/benchmar
ks.t line 53
# code:
# package call::sub::sig_3_params_1_arg_lexpkg;
#                     no warnings "experimental::signatures";
#                     use feature "signatures";
#                     local $::x = 1;
#                     my $self = {}; sub sig ($a, $b = $a, $c = $::x) {}; for (1
..1) { sig($self) } 1;
# gave:
# Not enough arguments for subroutine call::sub::sig_3_params_1_arg_lexpkg::sig.
 Want: 1, but got: 0 at (eval 12) line 5.
# Failed test 99 - running call::sub::sig_3_params_3_args at perf/benchmarks.t l
ine 53
# code:
# package call::sub::sig_3_params_3_args;
#                     no warnings "experimental::signatures";
#                     use feature "signatures";
#                     my $self = {}; sub sig ($a, $b, $c) {}; for (1..1) { sig($
self,1,2) } 1;
# gave:
# Not enough arguments for subroutine call::sub::sig_3_params_3_args::sig. Want:
 3, but got: 0 at (eval 13) line 4.

1..141
ok 1 - legal token: call::sub::3_args
ok 2 - legal keys:  call::sub::3_args
ok 3 - legal token: call::sub::sig_3_params_1_arg_
ok 4 - legal keys:  call::sub::sig_3_params_1_arg_
ok 5 - legal token: call::sub::sig_3_params_1_arg_expr
ok 6 - legal keys:  call::sub::sig_3_params_1_arg_expr
ok 7 - legal token: call::sub::sig_3_params_1_arg_lexpkg
ok 8 - legal keys:  call::sub::sig_3_params_1_arg_lexpkg
ok 9 - legal token: call::sub::sig_3_params_3_args
ok 10 - legal keys:  call::sub::sig_3_params_3_args
ok 11 - legal token: expr::add::fast_arith
ok 12 - legal keys:  expr::add::fast_arith
ok 13 - legal token: expr::add::fast_arith_o
ok 14 - legal keys:  expr::add::fast_arith_o
ok 15 - legal token: expr::arith::postdec
ok 16 - legal keys:  expr::arith::postdec
ok 17 - legal token: expr::arith::postinc
ok 18 - legal keys:  expr::arith::postinc
ok 19 - legal token: expr::arith::predec
ok 20 - legal keys:  expr::arith::predec
ok 21 - legal token: expr::arith::preinc
ok 22 - legal keys:  expr::arith::preinc
ok 23 - legal token: expr::array::lex_1const_0
ok 24 - legal keys:  expr::array::lex_1const_0
ok 25 - legal token: expr::array::lex_1const_m1
ok 26 - legal keys:  expr::array::lex_1const_m1
ok 27 - legal token: expr::array::lex_2const
ok 28 - legal keys:  expr::array::lex_2const
ok 29 - legal token: expr::array::lex_2var
ok 30 - legal keys:  expr::array::lex_2var
ok 31 - legal token: expr::array::pkg_1const_0
ok 32 - legal keys:  expr::array::pkg_1const_0
ok 33 - legal token: expr::array::pkg_1const_m1
ok 34 - legal keys:  expr::array::pkg_1const_m1
ok 35 - legal token: expr::array::pkg_2const
ok 36 - legal keys:  expr::array::pkg_2const
ok 37 - legal token: expr::array::pkg_2var
ok 38 - legal keys:  expr::array::pkg_2var
ok 39 - legal token: expr::array::ref_expr_lex_3const
ok 40 - legal keys:  expr::array::ref_expr_lex_3const
ok 41 - legal token: expr::array::ref_expr_pkg_3const
ok 42 - legal keys:  expr::array::ref_expr_pkg_3const
ok 43 - legal token: expr::array::ref_lex_2var
ok 44 - legal keys:  expr::array::ref_lex_2var
ok 45 - legal token: expr::array::ref_lex_3const
ok 46 - legal keys:  expr::array::ref_lex_3const
ok 47 - legal token: expr::array::ref_pkg_2var
ok 48 - legal keys:  expr::array::ref_pkg_2var
ok 49 - legal token: expr::array::ref_pkg_3const
ok 50 - legal keys:  expr::array::ref_pkg_3const
ok 51 - legal token: expr::array::shaped_const
ok 52 - legal keys:  expr::array::shaped_const
ok 53 - legal token: expr::arrayhash::lex_3var
ok 54 - legal keys:  expr::arrayhash::lex_3var
ok 55 - legal token: expr::arrayhash::pkg_3var
ok 56 - legal keys:  expr::arrayhash::pkg_3var
ok 57 - legal token: expr::assign::2list_lex
ok 58 - legal keys:  expr::assign::2list_lex
ok 59 - legal token: expr::assign::scalar_lex
ok 60 - legal keys:  expr::assign::scalar_lex
ok 61 - legal token: expr::hash::delete_lex_2var
ok 62 - legal keys:  expr::hash::delete_lex_2var
ok 63 - legal token: expr::hash::exists_lex_2var
ok 64 - legal keys:  expr::hash::exists_lex_2var
ok 65 - legal token: expr::hash::lex_1const
ok 66 - legal keys:  expr::hash::lex_1const
ok 67 - legal token: expr::hash::lex_2const
ok 68 - legal keys:  expr::hash::lex_2const
ok 69 - legal token: expr::hash::lex_2var
ok 70 - legal keys:  expr::hash::lex_2var
ok 71 - legal token: expr::hash::pkg_1const
ok 72 - legal keys:  expr::hash::pkg_1const
ok 73 - legal token: expr::hash::pkg_2const
ok 74 - legal keys:  expr::hash::pkg_2const
ok 75 - legal token: expr::hash::pkg_2var
ok 76 - legal keys:  expr::hash::pkg_2var
ok 77 - legal token: expr::hash::ref_expr_lex_3const
ok 78 - legal keys:  expr::hash::ref_expr_lex_3const
ok 79 - legal token: expr::hash::ref_expr_pkg_3const
ok 80 - legal keys:  expr::hash::ref_expr_pkg_3const
ok 81 - legal token: expr::hash::ref_lex_2var
ok 82 - legal keys:  expr::hash::ref_lex_2var
ok 83 - legal token: expr::hash::ref_lex_3const
ok 84 - legal keys:  expr::hash::ref_lex_3const
ok 85 - legal token: expr::hash::ref_pkg_2var
ok 86 - legal keys:  expr::hash::ref_pkg_2var
ok 87 - legal token: expr::hash::ref_pkg_3const
ok 88 - legal keys:  expr::hash::ref_pkg_3const
ok 89 - legal token: expr::index::utf8_position_1
ok 90 - legal keys:  expr::index::utf8_position_1
ok 91 - legal token: expr::multiply::fast_arith
ok 92 - legal keys:  expr::multiply::fast_arith
ok 93 - legal token: expr::multiply::fast_arith_o
ok 94 - legal keys:  expr::multiply::fast_arith_o
ok 95 - running call::sub::3_args
not ok 96 - running call::sub::sig_3_params_1_arg_
not ok 97 - running call::sub::sig_3_params_1_arg_expr
not ok 98 - running call::sub::sig_3_params_1_arg_lexpkg
not ok 99 - running call::sub::sig_3_params_3_args
ok 100 - running expr::add::fast_arith
ok 101 - running expr::add::fast_arith_o
ok 102 - running expr::arith::postdec
ok 103 - running expr::arith::postinc
ok 104 - running expr::arith::predec
ok 105 - running expr::arith::preinc
ok 106 - running expr::array::lex_1const_0
ok 107 - running expr::array::lex_1const_m1
ok 108 - running expr::array::lex_2const
ok 109 - running expr::array::lex_2var
ok 110 - running expr::array::pkg_1const_0
ok 111 - running expr::array::pkg_1const_m1
ok 112 - running expr::array::pkg_2const
ok 113 - running expr::array::pkg_2var
ok 114 - running expr::array::ref_expr_lex_3const
ok 115 - running expr::array::ref_expr_pkg_3const
ok 116 - running expr::array::ref_lex_2var
ok 117 - running expr::array::ref_lex_3const
ok 118 - running expr::array::ref_pkg_2var
ok 119 - running expr::array::ref_pkg_3const
ok 120 - running expr::array::shaped_const
ok 121 - running expr::arrayhash::lex_3var
ok 122 - running expr::arrayhash::pkg_3var
ok 123 - running expr::assign::2list_lex
ok 124 - running expr::assign::scalar_lex
ok 125 - running expr::hash::delete_lex_2var
ok 126 - running expr::hash::exists_lex_2var
ok 127 - running expr::hash::lex_1const
ok 128 - running expr::hash::lex_2const
ok 129 - running expr::hash::lex_2var
ok 130 - running expr::hash::pkg_1const
ok 131 - running expr::hash::pkg_2const
ok 132 - running expr::hash::pkg_2var
ok 133 - running expr::hash::ref_expr_lex_3const
ok 134 - running expr::hash::ref_expr_pkg_3const
ok 135 - running expr::hash::ref_lex_2var
ok 136 - running expr::hash::ref_lex_3const
ok 137 - running expr::hash::ref_pkg_2var
ok 138 - running expr::hash::ref_pkg_3const
ok 139 - running expr::index::utf8_position_1
ok 140 - running expr::multiply::fast_arith
ok 141 - running expr::multiply::fast_arith_o
Failed 4/141 subtests

Test Summary Report
-------------------
perf/benchmarks.t (Wstat: 0 Tests: 141 Failed: 4)
  Failed tests:  96-99
Files=1, Tests=141,  0 wallclock secs ( 0.06 usr +  0.00 sys =  0.06 CPU)
Result: FAIL

C:\sources\cperl\win32>
C:\sources\cperl\win32>cd ..\t   & perl harness -v ../lib/warnings.t   & cd ..\win32 
PROG: 
# signatures
use warnings;
use feature 'signatures';
no warnings 'experimental::signatures';
use constant UNDEF => undef;

my $x;

sub f($a, $y = $x + 1, $b = $x - 1, $c = UNDEF) {
    return "[$a:$b:$c]\n";
}

f(1);
EXPECTED:
Use of uninitialized value $x in addition (+) at - line 9.
Use of uninitialized value $x in subtraction (-) at - line 9.
Use of uninitialized value $c in concatenation (.) or string at - line 10.
GOT:
Not enough arguments for subroutine f. Want: 1, but got: 0 at - line 13.
# Failed test 362 - at lib\warnings\9uninit line 2172
PROG: 
# signatures with defaults on different lines
use warnings;
use feature 'signatures';
no warnings 'experimental::signatures';

my $x;

sub f($a,
      $y = $x + 1,
      $b = $x - 1,
      $c = $x * 2,
      $d = $x / 2,
      $e = undef)
{
    return "[$a:$b:$c:$d:$e]\n";
}

f(1);
EXPECTED:
Use of uninitialized value $x in addition (+) at - line 9.
Use of uninitialized value $x in subtraction (-) at - line 10.
Use of uninitialized value $x in multiplication (*) at - line 11.
Use of uninitialized value $x in division (/) at - line 12.
Use of uninitialized value $e in concatenation (.) or string at - line 15.
GOT:
Not enough arguments for subroutine f. Want: 1, but got: 0 at - line 18.
# Failed test 363 - at lib\warnings\9uninit line 2190
../lib/warnings.t .. 
1..869
# From lib\warnings\1global
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10
ok 11
ok 12
ok 13
ok 14
ok 15
ok 16
ok 17
ok 18
ok 19
ok 20
ok 21
ok 22
ok 23
ok 24
ok 25
ok 26
ok 27
# From lib\warnings\2use
ok 28
ok 29
ok 30
ok 31
ok 32
ok 33
ok 34
ok 35
ok 36
ok 37
ok 38
ok 39
ok 40
ok 41
ok 42
ok 43
ok 44
ok 45
ok 46
ok 47
ok 48
ok 49
ok 50
ok 51
ok 52
ok 53
ok 54
ok 55
ok 56
ok 57
ok 58
# From lib\warnings\3both
ok 59
ok 60
ok 61
ok 62
ok 63
ok 64
ok 65
ok 66
ok 67
ok 68
ok 69
ok 70
ok 71
ok 72
ok 73
ok 74
ok 75
ok 76
ok 77
ok 78
ok 79
ok 80
ok 81
# From lib\warnings\4lint
ok 82
ok 83
ok 84
ok 85
ok 86
ok 87
ok 88
ok 89
ok 90
ok 91
ok 92
ok 93
ok 94
ok 95
ok 96
ok 97
ok 98
# From lib\warnings\5nolint
ok 99
ok 100
ok 101
ok 102
ok 103
ok 104
ok 105
ok 106
ok 107
ok 108
ok 109
ok 110
ok 111
ok 112
ok 113
ok 114
ok 115
ok 116
# From lib\warnings\6default
ok 117
ok 118
ok 119
ok 120
ok 121
ok 122
ok 123
ok 124
ok 125
ok 126
ok 127
# From lib\warnings\7fatal
ok 128
ok 129
ok 130
ok 131
ok 132
ok 133
ok 134
ok 135
ok 136
ok 137
ok 138
ok 139
ok 140
ok 141
ok 142
ok 143
ok 144
ok 145
ok 146
ok 147
ok 148
ok 149
ok 150
ok 151
ok 152
ok 153
ok 154
ok 155
ok 156
ok 157
ok 158
ok 159
ok 160
ok 161
ok 162
ok 163
ok 164
ok 165
ok 166
ok 167
ok 168
ok 169
ok 170
ok 171
# From lib\warnings\8signal
ok 172
# From lib\warnings\9enabled
ok 173
ok 174
ok 175
ok 176
ok 177
ok 178
ok 179
ok 180
ok 181
ok 182
ok 183
ok 184
ok 185
ok 186
ok 187
ok 188
ok 189
ok 190
ok 191
ok 192
ok 193
ok 194
ok 195
ok 196
ok 197
ok 198
ok 199
ok 200
ok 201
ok 202
ok 203
ok 204
ok 205
ok 206
ok 207
ok 208
ok 209
ok 210
ok 211
ok 212
ok 213
ok 214
ok 215
ok 216
ok 217
ok 218
ok 219
ok 220
ok 221
ok 222
ok 223
ok 224
ok 225
ok 226
ok 227
ok 228
ok 229
ok 230
ok 231
ok 232
# From lib\warnings\9uninit
ok 233
ok 234
ok 235
ok 236
ok 237
ok 238
ok 239
ok 240
ok 241
ok 242
ok 243
ok 244
ok 245
ok 246
ok 247
ok 248
ok 249
ok 250
ok 251
ok 252
ok 253
ok 254
ok 255
ok 256
ok 257
ok 258
ok 259
ok 260
ok 261
ok 262
ok 263
ok 264
ok 265
ok 266
ok 267
ok 268
ok 269
ok 270
ok 271
ok 272
ok 273
ok 274
ok 275
ok 276
ok 277
ok 278
ok 279
ok 280
ok 281
ok 282
ok 283
ok 284
ok 285
ok 286
ok 287
ok 288
ok 289
ok 290
# PROG: 
# use warnings;
# 
# my $c;
# my $d = 1;
# while ($c == 0 && $d) {
#   # a
#   # few
#   # blank
#   # lines
#   undef $d;
# }
# EXPECTED:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# GOT:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 10.
not ok 291 # TODO long standing bug - conditions of while loops
# Failed test 291 - at lib\warnings\9uninit line 1482
# PROG: 
# use warnings;
# 
# my $c;
# my $d;
# until ($c == 1) {
#   # a
#   # few
#   # blank
#   # lines
#   $c = 1 if ++$d == 2;
# }
# EXPECTED:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# GOT:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 10.
not ok 292 # TODO long standing bug - conditions of until loops
# Failed test 292 - at lib\warnings\9uninit line 1498
# PROG: 
# use warnings;
# 
# my $c;
# my $d;
# for ($d = 1; $c == 0 && $d; ) {
#   # a
#   # few
#   # blank
#   # lines
#   undef $d;
# }
# 
# my $e;
# for ($d = 2; $d > 0; $e = !($c == 0)) {
#   # a
#   # few
#   # blank
#   # lines
#   --$d;
# }
# EXPECTED:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 14.
# Use of uninitialized value $c in numeric eq (==) at - line 14.
# GOT:
# Use of uninitialized value $c in numeric eq (==) at - line 5.
# Use of uninitialized value $c in numeric eq (==) at - line 10.
# Use of uninitialized value $c in numeric eq (==) at - line 14.
# Use of uninitialized value $c in numeric eq (==) at - line 14.
not ok 293 # TODO long standing bug - conditions of for loops
# Failed test 293 - at lib\warnings\9uninit line 1514
# PROG: 
# use warnings;
# my $undef;
# 
# my $a = $undef + 1;
# my $b
#   = $undef
#   + 1;
# EXPECTED:
# Use of uninitialized value $undef in addition (+) at - line 4.
# Use of uninitialized value $undef in addition (+) at - line 7.
# GOT:
# Use of uninitialized value $undef in addition (+) at - line 4.
# Use of uninitialized value $undef in addition (+) at - line 5.
not ok 294 # TODO long standing bug - more general variant of the above problem
# Failed test 294 - at lib\warnings\9uninit line 1541
ok 295
ok 296
# `` produces an error on STDERR on Win32
ok 297
# qx produces an error on STDERR on Win32
ok 298
ok 299
# -k produces no warning on Win32
ok 300
ok 301
ok 302
ok 303
ok 304
ok 305
ok 306
ok 307
ok 308
ok 309
ok 310
ok 311
ok 312
ok 313
ok 314
ok 315
ok 316
ok 317
ok 318
ok 319
ok 320
ok 321
ok 322
ok 323
ok 324
ok 325
ok 326
ok 327
ok 328
ok 329
ok 330
ok 331
ok 332
ok 333
ok 334
ok 335
ok 336
ok 337
ok 338
ok 339
ok 340
ok 341
ok 342
ok 343
ok 344
ok 345
ok 346
ok 347
ok 348
ok 349
ok 350
ok 351
ok 352
ok 353
ok 354
ok 355
ok 356
ok 357
ok 358 - off-by-one error in hash bucket walk in key detection logic
ok 359 - SvPOK && SvLEN==0 should not produce uninit warning
ok 360
ok 361
not ok 362
not ok 363
# From lib\warnings\av
# From lib\warnings\doio
ok 364
ok 365
ok 366
ok 367
ok 368
ok 369
ok 370
ok 371
ok 372
ok 373
ok 374
ok 375
ok 376
ok 377
ok 378
# warns only without perlio
ok 379
ok 380
ok 381
ok 382
ok 383
ok 384
ok 385
ok 386
ok 387
ok 388
ok 389
# From lib\warnings\doop
ok 390
# From lib\warnings\gv
ok 391
ok 392
ok 393
ok 394
ok 395
ok 396
ok 397
ok 398
ok 399
ok 400
ok 401
ok 402
ok 403
ok 404
ok 405
ok 406
ok 407
ok 408
ok 409
ok 410
ok 411
ok 412
# From lib\warnings\hv
# From lib\warnings\malloc
# From lib\warnings\mg
ok 413
ok 414
ok 415
ok 416
ok 417
# MSWin32, can't kill() to raise()
ok 418
# MSWin32, can't kill() to raise()
ok 419
# MSWin32, can't kill() to raise()
ok 420
# MSWin32, can't kill() to raise()
ok 421
ok 422
ok 423
ok 424
ok 425
# From lib\warnings\op
ok 426
ok 427
ok 428
ok 429
ok 430
ok 431
ok 432
ok 433
ok 434
ok 435
ok 436
ok 437
ok 438
ok 439
ok 440
ok 441
ok 442
ok 443
ok 444
ok 445
ok 446
# getppid not present
ok 447
# getpgrp not present
ok 448
ok 449
# getpriority not present
ok 450
ok 451
ok 452
ok 453
ok 454
ok 455
ok 456
ok 457
ok 458
ok 459
ok 460
ok 461
ok 462
ok 463
ok 464
ok 465
ok 466
ok 467
ok 468
ok 469
ok 470
ok 471
ok 472
ok 473
ok 474
ok 475
ok 476
ok 477
ok 478
ok 479
ok 480
ok 481
ok 482
ok 483
ok 484
ok 485
ok 486
ok 487
ok 488
ok 489
ok 490
ok 491
ok 492
ok 493
ok 494
ok 495
ok 496
ok 497
ok 498
ok 499
ok 500
ok 501
ok 502
ok 503
ok 504
ok 505
ok 506
ok 507
ok 508
ok 509
ok 510
ok 511
ok 512
ok 513
ok 514
ok 515
ok 516
ok 517
ok 518
ok 519
ok 520
ok 521
ok 522
ok 523
# From lib\warnings\pad
ok 524
ok 525
ok 526
ok 527
ok 528
ok 529
ok 530
ok 531
ok 532
ok 533
ok 534
ok 535
ok 536
ok 537
ok 538
ok 539
ok 540
ok 541
ok 542
ok 543
ok 544
ok 545
ok 546
ok 547
ok 548
ok 549
ok 550
ok 551
ok 552
ok 553
ok 554
ok 555
ok 556
ok 557
ok 558
ok 559
ok 560
ok 561
ok 562
ok 563
ok 564
ok 565
ok 566
ok 567
ok 568
# From lib\warnings\perl
ok 569
ok 570
ok 571
ok 572
ok 573
ok 574
ok 575
ok 576
ok 577
ok 578
ok 579
ok 580
ok 581
ok 582
ok 583
ok 584
ok 585
ok 586
ok 587
ok 588
ok 589
ok 590
ok 591
ok 592
ok 593
# From lib\warnings\perlio
ok 594
ok 595
ok 596
ok 597 - :win32 experimental warning
ok 598 - :win32 experimental warning disabled
# From lib\warnings\pp
ok 599
ok 600
ok 601
ok 602
ok 603
ok 604
ok 605
ok 606
ok 607
ok 608
# From lib\warnings\pp_ctl
ok 609
ok 610
ok 611
ok 612
ok 613
ok 614
ok 615
ok 616
ok 617
ok 618
ok 619
ok 620
ok 621
ok 622
ok 623
ok 624
ok 625
# From lib\warnings\pp_hot
ok 626
ok 627
ok 628
ok 629
ok 630
ok 631
ok 632
ok 633
ok 634
ok 635
ok 636
ok 637
ok 638
ok 639
ok 640
ok 641
ok 642
ok 643
ok 644
ok 645
ok 646
ok 647
ok 648
# From lib\warnings\pp_pack
ok 649
ok 650
ok 651
ok 652
ok 653
ok 654
# From lib\warnings\pp_sys
ok 655
ok 656
ok 657
ok 658
ok 659
ok 660
ok 661
ok 662
ok 663
ok 664
ok 665
ok 666
ok 667
ok 668
ok 669
ok 670
ok 671
ok 672
ok 673
ok 674
ok 675
ok 676
# fchdir not present
ok 677
ok 678
ok 679
ok 680
ok 681
ok 682
ok 683
ok 684
# From lib\warnings\regcomp
ok 685
ok 686
ok 687
# From lib\warnings\regexec
# most systems run into stacksize limits
ok 688
# most systems run into stacksize limits
ok 689
# most systems run into stacksize limits
ok 690
# most systems run into stacksize limits
ok 691
ok 692 - Wide character in non-UTF-8 locale
# no UTF-8 locales
ok 693 - Wide character in UTF-8 locale
ok 694 - \b{} in non-UTF-8 locale
# No UTF-8 locale available
ok 695 - \b{} in UTF-8 locale
# From lib\warnings\run
# From lib\warnings\sv
ok 696
ok 697
ok 698
ok 699
ok 700
ok 701
ok 702
ok 703
ok 704
ok 705
ok 706
ok 707
ok 708
ok 709
ok 710
ok 711
ok 712
ok 713
ok 714
ok 715
ok 716
ok 717
ok 718
ok 719
ok 720
ok 721
ok 722
ok 723
ok 724
ok 725
ok 726
# From lib\warnings\taint
ok 727
ok 728
ok 729
# From lib\warnings\toke
ok 730
ok 731
ok 732
ok 733
ok 734
ok 735
ok 736
ok 737
ok 738
ok 739
ok 740
ok 741
ok 742
ok 743
ok 744
ok 745
ok 746
ok 747
ok 748
ok 749
ok 750
ok 751
ok 752
ok 753
ok 754
ok 755
ok 756
ok 757
ok 758
ok 759
ok 760
ok 761
ok 762
ok 763
ok 764
ok 765
ok 766
ok 767
ok 768
ok 769
ok 770
ok 771
ok 772
ok 773
ok 774
ok 775
ok 776
ok 777
ok 778
ok 779
ok 780
ok 781
ok 782
ok 783
ok 784
ok 785
ok 786
ok 787
ok 788
ok 789
ok 790
ok 791
ok 792
ok 793
ok 794
ok 795
ok 796
ok 797
ok 798
ok 799
ok 800
ok 801
ok 802
ok 803
ok 804
ok 805
ok 806
ok 807
ok 808
ok 809
ok 810
ok 811
ok 812
ok 813
ok 814
ok 815
# test is EBCDIC-specific
ok 816
ok 817
ok 818
ok 819
ok 820
ok 821
ok 822
ok 823
ok 824
ok 825
ok 826
ok 827
ok 828
ok 829
ok 830
# From lib\warnings\universal
# todo fix: overloading triggers spurious warnings
ok 831
# todo fix: overloading triggers spurious warnings
ok 832
# From lib\warnings\utf8
ok 833
ok 834
ok 835
ok 836
ok 837
ok 838
ok 839
ok 840 - Matching \p{} against above-Unicode
ok 841 - Matching Unicode property against above-Unicode code point outputs a warning even if optimizer rejects the match (in synthetic start class)
ok 842 - Matching POSIX class property against above-Unicode code point doesn't output a warning
ok 843
ok 844 - utf8, non_unicode warnings categories work on Matched non-Unicode code point warning
ok 845 - optimizable regnode should still give non_unicode warnings when fatalized
ok 846 - optimizable regnode should not give non_unicode warnings when warnings are off
ok 847 - 'All' matches above-Unicode without any warning
ok 848
ok 849
ok 850
ok 851
ok 852
ok 853
ok 854 - C<use warnings "nonchar"> works in isolation
ok 855 - C<use warnings "surrogate"> works in isolation
ok 856 - C<use warnings "non_unicode"> works in isolation
ok 857
ok 858 - Case change crosses 255/256 under non-UTF8 locale
ok 859 - Wide character in non-UTF-8 locale
# no UTF-8 locales
ok 860 - Wide character in UTF-8 locale
# From lib\warnings\util
ok 861
ok 862
ok 863
ok 864
ok 865
ok 866
ok 867
ok 868
ok 869
Failed 2/869 subtests 

Test Summary Report
-------------------
../lib/warnings.t (Wstat: 0 Tests: 869 Failed: 2)
  Failed tests:  362-363
Files=1, Tests=869, 30 wallclock secs ( 0.22 usr +  0.03 sys =  0.25 CPU)
Result: FAIL

@bulk88
Copy link
Member

bulk88 commented Jan 5, 2016

The "out of memory" in signatures.t is

>   cperl522.dll!Perl_cxinc(interpreter * my_perl=0x0039a37c) Line 76   C
    cperl522.dll!Perl_pp_entersub(interpreter * my_perl=0x0039a37c) Line 3352   C
    cperl522.dll!Perl_runops_standard(interpreter * my_perl=0x0039a37c) Line 41 C
    cperl522.dll!S_run_body(interpreter * my_perl=0x0039a37c, long oldscope=1) Line 2482    C
    cperl522.dll!perl_run(interpreter * my_perl=0x0039a37c) Line 2413   C
    cperl522.dll!RunPerl(int argc=2, char * * argv=0x00399be0, char * * env=0x0039b500) Line 257    C++
    perl.exe!main(int argc=2, char * * argv=0x00399be0, char * * env=0x003982c8) Line 39    C
    perl.exe!__tmainCRTStartup() Line 626   C
    kernel32.dll!@BaseThreadInitThunk@12�() Unknown
    ntdll.dll!___RtlUserThreadStart@8�()    Unknown
    ntdll.dll!__RtlUserThreadStart@8�() Unknown

All process memory is exhausted extending the context stack to millions/billions of entries.

Curcop points to this

sub t122 ($c = 5, $r = $c > 0 ? __SUB__->($c - 1) : "")

line in signatures.t. That line seems to be doing infinite recursion. trying to add a dump of the perl callstack doesn't work

use Carp;
BEGIN {
    *cluck = *Carp::cluck;
}
sub t122 (cluck(), $c = 5, $r = $c > 0 ? __SUB__->($c - 1) : "")

{

 Carp::cluck();

 return $c.$r;

}
C:\sources\cperl\win32>cd ..\t   & perl harness -v op/signatures.t   & cd ..\win
32
op/signatures.t .. No such class cluck at op/signatures.t line 306, near "sub t1
22 (cluck"
Parse error at op/signatures.t line 306.
syntax error at op/signatures.t line 306, near "(cluck("
syntax error at op/signatures.t line 314, near "}"
BEGIN not safe after errors--compilation aborted at op/signatures.t line 362.
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run

Test Summary Report
-------------------
op/signatures.t (Wstat: 65280 Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
Files=1, Tests=0,  1 wallclock secs ( 0.05 usr +  0.00 sys =  0.05 CPU)
Result: FAIL

C:\sources\cperl\win32>

@rurban
Copy link
Member Author

rurban commented Jan 5, 2016

Thanks, but I see the msvc test results by myself on appveyor. The problem is actual debugging on the cxstack recursion problem.

-DkvtX is a pretty good debugging setting for a single case, and the debugger should also help.
I'll do it when I have more time and booted up my msvc env.

@rurban rurban modified the milestones: v5.24.0, v5.22.2 Apr 30, 2016
rurban pushed a commit that referenced this issue Jun 3, 2016
not undef as in Perl5. We need that for introspection and don't
want a new builtin. prototypes are a shorthand form of signatures
anyway.
Add a new CvSIGOP field to access the signature op from any CV.
[GH #7]

# Conflicts:
#	pod/perlcdelta.pod
#	pod/perlfunc.pod
@rurban
Copy link
Member Author

rurban commented Jun 3, 2016

Merged into master (v5.24.0c)

@rurban rurban closed this as completed Jun 3, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants