Skip to content

EXTEND changes visible size of file and array. [rt.cpan.org #39196] #17496

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
toddr opened this issue Jan 19, 2020 · 28 comments
Closed

EXTEND changes visible size of file and array. [rt.cpan.org #39196] #17496

toddr opened this issue Jan 19, 2020 · 28 comments
Labels
dist-Tie-File issues in the dual-life blead-first Tie-File distribution

Comments

@toddr
Copy link
Member

toddr commented Jan 19, 2020

Migrated from rt.cpan.org#39196 (status was 'new')

Requestors:

From [email protected] on 2008-09-12 00:19:06
:

Bug present in at least Tie::File 0.97 and 0.97_02.

EXTEND is used to expand the internal buffer.
STORESIZE is used to actually change the visible size of the array.
Tie::File incorrectly treats EXTEND as STORESIZE.

When sorting in place (@a = sort @a) on a magical array (such as one
tied to Tie::File), sort EXTENDs the array to scalar(@a)+1 elements.

This is meant to extend the internal storage size, but it has visible
effects when the array is tied to Tie::File. The reported number of
elements is different than it should be, and a blank line is appended to
the file (in the sort example).

See http://www.perlmonks.org/?node_id=710580 for runnable code and some
extra details.


@toddr
Copy link
Member Author

toddr commented Jan 27, 2020

I'm transferring this issue to https://github.com/Perl/perl5 since it is issue with a module in dist.

@toddr toddr transferred this issue from Dual-Life/Tie-File Jan 27, 2020
@toddr toddr added dist-Tie-File issues in the dual-life blead-first Tie-File distribution Needs Triage labels Jan 27, 2020
@jkeenan
Copy link
Contributor

jkeenan commented Jan 29, 2020

The bug is still present in 5.30.1. It can be demonstrated with the following program:

$ cat perlmonks-710580-tie-file.pl 
#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Data::Dumper; $Data::Dumper::Indent=1;
use Carp;
use Tie::File;

my $g = 'tiefile';
unlink $g if -f $g;

tie my @tied_array, 'Tie::File', $g  or die "Could not tie to $g: $!";

push(@tied_array, $_) for (1..3);

print "\@tied_array has " . scalar @tied_array . " elements before sorting\n";
@tied_array = sort {uc($a) cmp uc($b)} @tied_array;

print "\@tied_array has " . scalar @tied_array . " elements after sorting\n";
say Dumper (\@tied_array);
untie @tied_array;

Results:

$ perl perlmonks-710580-tie-file.pl 
@tied_array has 3 elements before sorting
@tied_array has 4 elements after sorting
$VAR1 = [
  '1',
  '2',
  '3',
  ''
];

See perlmonks 710580 for good analysis by @ikegami.

Thank you very much.
Jim Keenan

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@ikegami
Copy link
Contributor

ikegami commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@ikegami
Copy link
Contributor

ikegami commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

demerphq added a commit that referenced this issue Jan 30, 2020
Most tied array implementations can and should NO-OP the EXTEND
method, and the sample code should not conflate EXTEND with STORESIZE.

EXTEND is actually less usefull used by the core than it could be
as AvMAX() does not have an equivalent tied method. So we cannot
check if we need to extend.

This is related to [rt.cpan.org #39196] / Issue #17496.
demerphq added a commit that referenced this issue Jan 30, 2020
…d to av_extend()

apparently over the years there has been confusion about what the
count argument to av_extend() is for, and at least some of our
code has been incorrectly assuming it means the *index* in the
array that one wants to write to, and not the number of elements
that one expects to be available to write to. This means that
part of the code was calling av_extend with arguments one less
than they should have been.

One such example is the code in pp_aassign() which passes in 1 less
than it should, and the code in av_extend() for tied hashes would
then add 1 back, thus making the tied interface seem to behave
properly. However this is wrong, and it shows up in

   @tied_array = sort @tied_array;

which correctly calls av_extend with the number of elements in
the array, which in turn would cause tied hashes to EXTEND one
more element than they should, which for something like Tie::File
causes the creation of an empty element at the end of the file.
It is a little debatable whether Tie::File::EXTEND should be a
no-op or not (I lean towards not once the internals are fixed)
but it is certainly the case that what we were doing before this
was not correct.

This fixes [rt.cpan.org #39196] Issue #17496, although does not
add tests, which will come in a follow up patch once I have time
and I have seen the smoke tests from this patch.
@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

demerphq added a commit that referenced this issue Jan 30, 2020
In [rt.cpan.org #39196] issue #17496 there is a report
that Tie::File produced spurious blank lines in the file
after

    @tied= sort @tied;

it turns out that this is because Tie::File treats
EXTEND similarly to STORESIZE (which is arguably not
entirely correct, but also not that weird) coupled
with an off by one error in the calls to av_extend()
in pp_sort.

This patch fixes the fencepost error, adds some comments
to av_extend() to make it clear what it is doing, and
adds a test that EXTEND is called by this code with
correct argument.
@demerphq
Copy link
Collaborator

demerphq commented Jan 30, 2020 via email

@iabyn
Copy link
Contributor

iabyn commented Jan 31, 2020 via email

@demerphq
Copy link
Collaborator

demerphq commented Jan 31, 2020 via email

@iabyn
Copy link
Contributor

iabyn commented Jan 31, 2020 via email

demerphq added a commit that referenced this issue Jan 31, 2020
Most tied array implementations can and should NO-OP the EXTEND
method, and the sample code should not conflate EXTEND with STORESIZE.

EXTEND is actually less usefully used by the core than it could be
as AvMAX() does not have an equivalent tied method. So we cannot
check if we need to extend for a tied array.

This is related to [rt.cpan.org #39196] / Issue #17496.
demerphq added a commit that referenced this issue Jan 31, 2020
In [rt.cpan.org #39196] issue #17496 there is a report
that Tie::File produced spurious blank lines in the file
after

    @tied= sort @tied;

it turns out that this is because Tie::File treats
EXTEND similarly to STORESIZE (which is arguably not
entirely correct, but also not that weird) coupled
with an off by one error in the calls to av_extend()
in pp_sort.

This patch fixes the fencepost error, adds some comments
to av_extend() to make it clear what it is doing, and
adds a test that EXTEND is called by this code with
correct argument.
@demerphq
Copy link
Collaborator

demerphq commented Jan 31, 2020 via email

@demerphq
Copy link
Collaborator

Thanks for the report Eric! Sorry it took so long to fix. :-(

@toddr
Copy link
Member Author

toddr commented Jan 31, 2020

We had a failure from this commit: https://github.com/Perl/perl5/runs/419405069?check_suite_focus=true

@demerphq
Copy link
Collaborator

demerphq commented Jan 31, 2020 via email

@xenu
Copy link
Member

xenu commented Jan 31, 2020

C:\Users\xenu\Documents\git\perl5\t>gdb .\perl
GNU gdb (GDB) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from .\perl...done.
(gdb) run -I ..\lib op\sort.t
Starting program: C:\Users\xenu\Documents\git\perl5\t\perl.exe -I ..\lib op\sort.t
[New Thread 6812.0x17e0]
[New Thread 6812.0x1820]
[New Thread 6812.0x3e4]
1..203
ok 1 - upper first 1
ok 2 - upper first 2
ok 3 - upper first 3
ok 4 - sort of non-utf8 list worked
ok 5 - No elements were wrongly converted to utf8 in sorting
ok 6 - sort of utf8 list worked
ok 7 - No elements were wrongly converted from utf8 in sorting
ok 8 - upper first 4
ok 9 - reverse 1
ok 10 - reverse 2
ok 11 - reverse 3
ok 12 - reverse 4
ok 13 - reverse 5
ok 14 - sort numeric
ok 15 - sorter sub name in var 1
ok 16 - sorter sub name in var 2
ok 17 - just sort
ok 18 - grep then sort
ok 19 - map then sort
ok 20 - reverse then sort
ok 21 - CORE::reverse then sort
ok 22
ok 23 - redefine sort sub inside the sort sub
ok 24 - redefining sort subs outside the sort $@=[]
ok 25 - twoface redefinition
ok 26 - redefinition should not take effect during the sort
ok 27 - twoface eval
ok 28 - old skool package
ok 29 - one is not a sub
ok 30 - sortname 1
ok 31 - sortname 2
ok 32 - sortname 3
ok 33 - sortname 4
ok 34 - sortname 5
ok 35 - sortname 6
ok 36 - sortname 7
ok 37 - sortname 8
ok 38 - sortname local 1
ok 39 - sortname local 2
ok 40 - sortname local 3
ok 41 - sortname local 4
ok 42 - sortname local 5
ok 43 - sortname local 6
ok 44 - sortname local 7
ok 45 - sortname local 8
ok 46 - force blockness
ok 47 - a cmp b
ok 48 - b cmp a
ok 49 - integer a <=> b
ok 50 - integer b <=> a
ok 51 - integer a cmp b
ok 52 - integer b cmp a
ok 53 - optimized-away comparison block doesn't take any other arguments away with it
ok 54 - not in main:: 1
ok 55 - not in main:: 2
ok 56 - wantarray 1
ok 57 - wantarray 1
ok 58 - wantarray 1
ok 59 - wantarray 1
ok 60 - wantarray 2
ok 61 - wantarray 2
ok 62 - wantarray 2
ok 63 - reenter 1
ok 64 - reenter 2
ok 65 - bug id 19991001.003 (\#1549)
ok 66 - inplace sort of global
ok 67 - inplace sort of lexical
ok 68 - inplace reversed sort of global
ok 69 - inplace custom sort of global
ok 70 - inplace sort with function of lexical
ok 71 - inplace sort of tied array
ok 72 - inplace sort of tied array with function
ok 73 - un-inplace sort of global
ok 74 - un-inplace sort of global 2
ok 75 - un-inplace sort of lexical
ok 76 - un-inplace sort of lexical 2
ok 77 - un-inplace reversed sort of global
ok 78 - un-inplace reversed sort of global 2
ok 79 - un-inplace custom sort of global
ok 80 - un-inplace custom sort of global 2
ok 81 - un-inplace sort with function of lexical
ok 82 - un-inplace sort with function of lexical 2
ok 83 - in-place sorting segfault
ok 84 - RT 39358 - aa
ok 85 - RT 39358 - copy
ok 86 - RT \#128340
ok 87 - test that EXTEND has not been called prior to initialization
ok 88 - test that EXTEND has not been called during initialization
ok 89 - test that EXTEND was called with an argument of 3 by pp_sort()
ok 90 - test that sorting the tied array worked even though EXTEND is a no-op
ok 91 - Simple stable sort
ok 92 - Simple stable in place sort
ok 93 - stable $a <=> $b sort
ok 94 - stable $a cmp $b sort
ok 95 - stable $a cmp $b in place sort
ok 96 - stable $b cmp $a sort
ok 97 - stable $b cmp $a in place sort
ok 98 - Reversed stable sort
ok 99 - Reversed stable in place sort
ok 100 - Reversed stable sort in scalar context
ok 101 - reversed stable $a cmp $b sort
ok 102 - revesed stable $a cmp $b in place sort
ok 103 - Reversed stable $a cmp $b sort in scalar context
ok 104 - reversed stable $b cmp $a sort
ok 105 - revesed stable $b cmp $a in place sort
ok 106 - Reversed stable $b cmp $a sort in scalar context
ok 107 - reversed stable complex sort
ok 108 - revesed stable complex in place sort
ok 109 - Reversed stable complex sort in scalar context
ok 110 - reversed stable sort return list context
ok 111 - reversed stable sort return scalar context
ok 112 - reversed stable $a cmp $b sort return list context
ok 113 - reversed stable $a cmp $b sort return scalar context
ok 114 - reversed stable $b cmp $a sort return list context
ok 115 - reversed stable $b cmp $a sort return scalar context
ok 116 - reversed stable complex sort return list context
ok 117 - reversed stable complex sort return scalar context
ok 118 - stable $a cmp $b sort
ok 119 - stable $a <=> $b sort
ok 120 - stable $a <=> $b in place sort
ok 121 - stable $b <=> $a sort
ok 122 - stable $b <=> $a in place sort
ok 123 - optimized { <=> } without overloading
ok 124 - inline optimized { <=> } without overloading
ok 125 - Reversed stable sort
ok 126 - Reversed stable in place sort
ok 127 - Reversed stable sort in scalar context
ok 128 - reversed stable $a <=> $b sort
ok 129 - revesed stable $a <=> $b in place sort
ok 130 - reversed stable $a <=> $b sort in scalar context
ok 131 - reversed stable $b <=> $a sort
ok 132 - revesed stable $b <=> $a in place sort
ok 133 - reversed stable $b <=> $a sort in scalar context
ok 134 - reversed stable complex sort
ok 135 - revesed stable complex in place sort
ok 136 - reversed stable complex sort in scalar context
ok 137 - reversed stable $a <=> $b sort return list context
ok 138 - reversed stable $a <=> $b sort return scalar context
ok 139 - reversed stable $b <=> $a sort return list context
ok 140 - reversed stable $b <=> $a sort return scalar context
ok 141 - reversed stable complex sort return list context
ok 142 - reversed stable complex sort return scalar context
ok 143 - reversed sort with trailing argument
ok 144 - reversed sort with leading argument
ok 145 - goto subr outside subr
ok 146 - goto subr from a sort sub
ok 147 - goto out of a pseudo block 1
ok 148 - goto out of a pseudo block 2
ok 149 - undef active subr
ok 150 - sort from active sub
ok 151 - sort from active sub
ok 152 - sort subr called from other package
ok 153 - bug 36430
ok 154 - sort sub refcnt
gdb: unknown target exception 0xc0000028 at 0x7ff96c1dbf58

Thread 1 received signal ?, Unknown signal.
0x00007ff96c1dbf58 in ntdll!RtlRaiseStatus () from C:\Windows\SYSTEM32\ntdll.dll
(gdb) bt
#0  0x00007ff96c1dbf58 in ntdll!RtlRaiseStatus () from C:\Windows\SYSTEM32\ntdll.dll
#1  0x00007ff96c18c911 in ntdll!memset () from C:\Windows\SYSTEM32\ntdll.dll
#2  0x00007ff96b8e324d in msvcrt!_setjmpex () from C:\Windows\System32\msvcrt.dll
#3  0x0000000062b12c11 in Perl_die_unwind (my_perl=0x0, my_perl@entry=0xd04fc8, msv=msv@entry=0x27abec8)
    at ..\pp_ctl.c:1824
#4  0x0000000062b98c1a in Perl_vcroak (my_perl=0xd04fc8, pat=<optimized out>, args=<optimized out>) at ..\util.c:1729
#5  0x0000000062b98cf6 in Perl_croak_nocontext (pat=0x62d39fe1 <these_details+2209> "%s") at ..\util.c:1763
#6  0x0000000062b992a7 in Perl_croak_no_modify () at ..\util.c:1792
#7  0x0000000062b8e98e in Perl_pp_sort (my_perl=0xd04fc8) at ..\pp_sort.c:895
#8  0x0000000062b8ea06 in Perl_runops_standard (my_perl=0xd04fc8) at ..\run.c:42
#9  0x0000000062b4e1e0 in S_run_body (oldscope=<optimized out>, my_perl=<optimized out>) at perl.c:2781
#10 perl_run (my_perl=0x62b9f310 <xs_init(PerlInterpreter*)>, my_perl@entry=0xd04fc8) at perl.c:2709
#11 0x0000000062ba29e8 in RunPerl (argc=<optimized out>, argv=<optimized out>, env=0xc02770) at perllib.c:213
#12 0x00000000004013c7 in __tmainCRTStartup ()
#13 0x00000000004014fb in mainCRTStartup ()
(gdb)

@xenu
Copy link
Member

xenu commented Jan 31, 2020

I didn't investigate it further, but the backtrace looks very similar to #16729, which basically seems to be a compiler/linker/something bug triggered by random, harmless code changes.

BTW, I also ran into it on my private branch where I was doing some optimizations in pp_sort.

@jkeenan jkeenan reopened this Jan 31, 2020
@toddr
Copy link
Member Author

toddr commented Jan 31, 2020

Let me rerun it

@ikegami
Copy link
Contributor

ikegami commented Jan 31, 2020

I got the same results as xenu with the default build options, but the error went away when I switched to a debug build.

C:\Users\ikegami\perl\t>gdb --args ..\perl -I ..\lib op\sort.t
GNU gdb (GDB) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ..\perl...done.
(gdb) run
Starting program: C:\Users\ikegami\x\perl.exe -I ..\lib op\sort.t
[New Thread 3252.0xccc]
[New Thread 3252.0x4250]
[New Thread 3252.0x3ff4]
[New Thread 3252.0x54e8]
1..203
ok 1 - upper first 1
ok 2 - upper first 2
ok 3 - upper first 3
ok 4 - sort of non-utf8 list worked
ok 5 - No elements were wrongly converted to utf8 in sorting
ok 6 - sort of utf8 list worked
ok 7 - No elements were wrongly converted from utf8 in sorting
ok 8 - upper first 4
ok 9 - reverse 1
ok 10 - reverse 2
ok 11 - reverse 3
ok 12 - reverse 4
ok 13 - reverse 5
ok 14 - sort numeric
ok 15 - sorter sub name in var 1
ok 16 - sorter sub name in var 2
ok 17 - just sort
ok 18 - grep then sort
ok 19 - map then sort
ok 20 - reverse then sort
ok 21 - CORE::reverse then sort
ok 22
ok 23 - redefine sort sub inside the sort sub
ok 24 - redefining sort subs outside the sort $@=[]
ok 25 - twoface redefinition
ok 26 - redefinition should not take effect during the sort
ok 27 - twoface eval
ok 28 - old skool package
ok 29 - one is not a sub
ok 30 - sortname 1
ok 31 - sortname 2
ok 32 - sortname 3
ok 33 - sortname 4
ok 34 - sortname 5
ok 35 - sortname 6
ok 36 - sortname 7
ok 37 - sortname 8
ok 38 - sortname local 1
ok 39 - sortname local 2
ok 40 - sortname local 3
ok 41 - sortname local 4
ok 42 - sortname local 5
ok 43 - sortname local 6
ok 44 - sortname local 7
ok 45 - sortname local 8
ok 46 - force blockness
ok 47 - a cmp b
ok 48 - b cmp a
ok 49 - integer a <=> b
ok 50 - integer b <=> a
ok 51 - integer a cmp b
ok 52 - integer b cmp a
ok 53 - optimized-away comparison block doesn't take any other arguments away with it
ok 54 - not in main:: 1
ok 55 - not in main:: 2
ok 56 - wantarray 1
ok 57 - wantarray 1
ok 58 - wantarray 1
ok 59 - wantarray 1
ok 60 - wantarray 2
ok 61 - wantarray 2
ok 62 - wantarray 2
ok 63 - reenter 1
ok 64 - reenter 2
ok 65 - bug id 19991001.003 (\#1549)
ok 66 - inplace sort of global
ok 67 - inplace sort of lexical
ok 68 - inplace reversed sort of global
ok 69 - inplace custom sort of global
ok 70 - inplace sort with function of lexical
ok 71 - inplace sort of tied array
ok 72 - inplace sort of tied array with function
ok 73 - un-inplace sort of global
ok 74 - un-inplace sort of global 2
ok 75 - un-inplace sort of lexical
ok 76 - un-inplace sort of lexical 2
ok 77 - un-inplace reversed sort of global
ok 78 - un-inplace reversed sort of global 2
ok 79 - un-inplace custom sort of global
ok 80 - un-inplace custom sort of global 2
ok 81 - un-inplace sort with function of lexical
ok 82 - un-inplace sort with function of lexical 2
ok 83 - in-place sorting segfault
ok 84 - RT 39358 - aa
ok 85 - RT 39358 - copy
ok 86 - RT \#128340
ok 87 - test that EXTEND has not been called prior to initialization
ok 88 - test that EXTEND has not been called during initialization
ok 89 - test that EXTEND was called with an argument of 3 by pp_sort()
ok 90 - test that sorting the tied array worked even though EXTEND is a no-op
ok 91 - Simple stable sort
ok 92 - Simple stable in place sort
ok 93 - stable $a <=> $b sort
ok 94 - stable $a cmp $b sort
ok 95 - stable $a cmp $b in place sort
ok 96 - stable $b cmp $a sort
ok 97 - stable $b cmp $a in place sort
ok 98 - Reversed stable sort
ok 99 - Reversed stable in place sort
ok 100 - Reversed stable sort in scalar context
ok 101 - reversed stable $a cmp $b sort
ok 102 - revesed stable $a cmp $b in place sort
ok 103 - Reversed stable $a cmp $b sort in scalar context
ok 104 - reversed stable $b cmp $a sort
ok 105 - revesed stable $b cmp $a in place sort
ok 106 - Reversed stable $b cmp $a sort in scalar context
ok 107 - reversed stable complex sort
ok 108 - revesed stable complex in place sort
ok 109 - Reversed stable complex sort in scalar context
ok 110 - reversed stable sort return list context
ok 111 - reversed stable sort return scalar context
ok 112 - reversed stable $a cmp $b sort return list context
ok 113 - reversed stable $a cmp $b sort return scalar context
ok 114 - reversed stable $b cmp $a sort return list context
ok 115 - reversed stable $b cmp $a sort return scalar context
ok 116 - reversed stable complex sort return list context
ok 117 - reversed stable complex sort return scalar context
ok 118 - stable $a cmp $b sort
ok 119 - stable $a <=> $b sort
ok 120 - stable $a <=> $b in place sort
ok 121 - stable $b <=> $a sort
ok 122 - stable $b <=> $a in place sort
ok 123 - optimized { <=> } without overloading
ok 124 - inline optimized { <=> } without overloading
ok 125 - Reversed stable sort
ok 126 - Reversed stable in place sort
ok 127 - Reversed stable sort in scalar context
ok 128 - reversed stable $a <=> $b sort
ok 129 - revesed stable $a <=> $b in place sort
ok 130 - reversed stable $a <=> $b sort in scalar context
ok 131 - reversed stable $b <=> $a sort
ok 132 - revesed stable $b <=> $a in place sort
ok 133 - reversed stable $b <=> $a sort in scalar context
ok 134 - reversed stable complex sort
ok 135 - revesed stable complex in place sort
ok 136 - reversed stable complex sort in scalar context
ok 137 - reversed stable $a <=> $b sort return list context
ok 138 - reversed stable $a <=> $b sort return scalar context
ok 139 - reversed stable $b <=> $a sort return list context
ok 140 - reversed stable $b <=> $a sort return scalar context
ok 141 - reversed stable complex sort return list context
ok 142 - reversed stable complex sort return scalar context
ok 143 - reversed sort with trailing argument
ok 144 - reversed sort with leading argument
ok 145 - goto subr outside subr
ok 146 - goto subr from a sort sub
ok 147 - goto out of a pseudo block 1
ok 148 - goto out of a pseudo block 2
ok 149 - undef active subr
ok 150 - sort from active sub
ok 151 - sort from active sub
ok 152 - sort subr called from other package
ok 153 - bug 36430
ok 154 - sort sub refcnt
ok 155 - in-place sort of read-only array
ok 156 - return within loop
ok 157 - return with SVs on stack
ok 158 - return with SVs on stack
ok 159 - comparison result as string
ok 160 - comparison result as string
ok 161 - overload compare called once
ok 162 - overload sort result
ok 163 - overload string called twice
ok 164 - RT \#72334
ok 165 - RT \#72334
ok 166 - None before we start
ok 167 - 2 here
ok 168
ok 169 - sorted!
ok 170 - still the same 2 here
ok 171 - all gone
ok 172 - [perl \#77930] cx_stack reallocation during sort
ok 173 - Match vars do not leak from one plain sort sub to the next
ok 174 - Match vars do not leak from one $$ sort sub to the next
ok 175 - stubborn AUTOLOAD
ok 176 - AUTOLOAD without stub
ok 177 - AUTOLOAD with stubref
ok 178 - (sort) does not die
ok 179 - (sort) returns empty list
ok 180 - sort; does not die
ok 181 - sort; returns empty list
ok 182 - {sort} does not die
ok 183 - {sort} returns empty list
ok 184 - padrange and void context
ok 185 - no panic/crash with fatal warnings when sort sub returns undef
ok 186 - no panic/crash with fatal warnings when sort sub returns string
ok 187 - no panic/crash with fatal warnings when sort sub($$) returns undef
ok 188 - no panic/crash with fatal warnings when sort sub($$) returns string
ok 189 - sort block modifying $a and $b
ok 190 - [perl \#78194] op return values passed to sort
ok 191 - no crash when sort block deletes *a and *b
ok 192 - Ret: null blk
ok 193 - Ret: blk
ok 194 - Ret: blk ret
ok 195 - Ret: f0
ok 196 - Ret: f1
ok 197 - Ret: f2
ok 198 - Ret: f3
ok 199 - No crash when GP deleted out from under us [perl 124097]
ok 200 - *a wasn't localized inadvertantly
ok 201 - check sort order
ok 202
ok 203
[Thread 3252.0x54e8 exited with code 0]
[Thread 3252.0x4250 exited with code 0]
[Thread 3252.0x3ff4 exited with code 0]
[Inferior 1 (process 3252) exited normally]
(gdb)
C:\Users\ikegami\perl\t>gcc --version
gcc (x86_64-posix-seh, Built by strawberryperl.com project) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

@demerphq
Copy link
Collaborator

demerphq commented Feb 1, 2020 via email

@toddr toddr closed this as completed Feb 1, 2020
@toddr
Copy link
Member Author

toddr commented Feb 1, 2020

@demerphq thats fine. Can you open the other ticket and reference this one pls?

@demerphq
Copy link
Collaborator

demerphq commented Feb 2, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dist-Tie-File issues in the dual-life blead-first Tie-File distribution
Projects
None yet
Development

No branches or pull requests

6 participants