Hello community,
here is the log from the commit of package perl-autovivification for
openSUSE:Factory checked in at 2015-04-16 14:11:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-autovivification (Old)
and /work/SRC/openSUSE:Factory/.perl-autovivification.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-autovivification"
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-autovivification/perl-autovivification.changes
2013-10-17 20:44:13.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.perl-autovivification.new/perl-autovivification.changes
2015-04-16 14:11:42.000000000 +0200
@@ -1,0 +2,37 @@
+Mon Apr 13 18:22:05 UTC 2015 - [email protected]
+
+- updated to 0.14
+ see /usr/share/doc/packages/perl-autovivification/Changes
+
+ 0.14 2014-11-01 22:25 UTC
+ + Fix : [RT #99458] : AnyEvent::Loop hangs if autovivification 0.13
is
+ loaded
+ [RT #99904] : 'no autovivification' breaks
Lingua::EN::Inflect
+ from a distance
+ This was a regression in 0.13 which caused the peephole
+ optimizer to loop infinitely on "... while 1" constructs.
+ However, the Lingua::EN::Inflect problem only occured in perl
+ 5.20 and above.
+ Thanks Toshio Ito and Kent Fredric for reporting.
+
+ 0.13 2014-10-04 16:55 UTC
+ This release contains a change that, while being very likely to be
safe,
+ can potentially cause freezes during code compilation. Every release
+ should be carefully tested before being put in production, but this
is
+ especially true for this one.
+ + Add : Support for the PERL_OP_PARENT optional feature introduced in
+ perl 5.21.2.
+ + Doc : The CAVEATS section now warns about the global slowdown
during
+ compilation caused by this pragma.
+ + Fix : [RT #97703] : Android support
+ t/51-threads-teardown.t will no longer fail on Android.
+ Thanks Brian Fraser for reporting.
+ + Fix : Segfaults in eval in an END block of a Win32 pseudo-fork.
+ + Fix : Segfaults during global destruction of a thread or a
+ pseudo-fork.
+ + Opt : The global slowdown caused by this module has been greatly
+ reduced.
+ Thanks Ævar Arnfjörð Bjarmason for reporting and testing the
+ change.
+
+-------------------------------------------------------------------
Old:
----
autovivification-0.12.tar.gz
New:
----
autovivification-0.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-autovivification.spec ++++++
--- /var/tmp/diff_new_pack.1Nv0qc/_old 2015-04-16 14:11:43.000000000 +0200
+++ /var/tmp/diff_new_pack.1Nv0qc/_new 2015-04-16 14:11:43.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package perl-autovivification
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: perl-autovivification
-Version: 0.12
+Version: 0.14
Release: 0
%define cpan_name autovivification
Summary: Lexically disable autovivification.
@@ -28,16 +28,6 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
-#BuildRequires: perl(autovivification)
-#BuildRequires: perl(autovivification::TestCases)
-#BuildRequires: perl(autovivification::TestRequired1)
-#BuildRequires: perl(autovivification::TestRequired4::b0)
-#BuildRequires: perl(autovivification::TestRequired5::b0)
-#BuildRequires: perl(autovivification::TestRequired5::d0)
-#BuildRequires: perl(autovivification::TestRequired6)
-#BuildRequires: perl(autovivification::TestThreads)
-#BuildRequires: perl(Test::Leaner)
-#BuildRequires: perl(VPIT::TestHelpers)
%{perl_requires}
%description
++++++ autovivification-0.12.tar.gz -> autovivification-0.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/Changes
new/autovivification-0.14/Changes
--- old/autovivification-0.12/Changes 2013-09-05 19:03:49.000000000 +0200
+++ new/autovivification-0.14/Changes 2014-11-01 23:20:41.000000000 +0100
@@ -1,5 +1,36 @@
Revision history for autovivification
+0.14 2014-11-01 22:25 UTC
+ + Fix : [RT #99458] : AnyEvent::Loop hangs if autovivification 0.13 is
+ loaded
+ [RT #99904] : 'no autovivification' breaks Lingua::EN::Inflect
+ from a distance
+ This was a regression in 0.13 which caused the peephole
+ optimizer to loop infinitely on "... while 1" constructs.
+ However, the Lingua::EN::Inflect problem only occured in perl
+ 5.20 and above.
+ Thanks Toshio Ito and Kent Fredric for reporting.
+
+0.13 2014-10-04 16:55 UTC
+ This release contains a change that, while being very likely to be
safe,
+ can potentially cause freezes during code compilation. Every release
+ should be carefully tested before being put in production, but this is
+ especially true for this one.
+ + Add : Support for the PERL_OP_PARENT optional feature introduced in
+ perl 5.21.2.
+ + Doc : The CAVEATS section now warns about the global slowdown during
+ compilation caused by this pragma.
+ + Fix : [RT #97703] : Android support
+ t/51-threads-teardown.t will no longer fail on Android.
+ Thanks Brian Fraser for reporting.
+ + Fix : Segfaults in eval in an END block of a Win32 pseudo-fork.
+ + Fix : Segfaults during global destruction of a thread or a
+ pseudo-fork.
+ + Opt : The global slowdown caused by this module has been greatly
+ reduced.
+ Thanks Ævar Arnfjörð Bjarmason for reporting and testing the
+ change.
+
0.12 2013-09-05 17:20 UTC
+ Fix : Check functions are now replaced and restored in a thread-safe
manner, either by using the wrap_op_checker() function from
perl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/MANIFEST
new/autovivification-0.14/MANIFEST
--- old/autovivification-0.12/MANIFEST 2013-08-29 01:18:21.000000000 +0200
+++ new/autovivification-0.14/MANIFEST 2014-10-13 14:34:22.000000000 +0200
@@ -7,7 +7,6 @@
autovivification.xs
lib/autovivification.pm
ptable.h
-reap.h
samples/bench.pl
samples/hash2array.pl
t/00-load.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/META.json
new/autovivification-0.14/META.json
--- old/autovivification-0.12/META.json 2013-09-05 19:05:14.000000000 +0200
+++ new/autovivification-0.14/META.json 2014-11-01 23:21:30.000000000 +0100
@@ -4,7 +4,7 @@
"Vincent Pit <[email protected]>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.74, CPAN::Meta::Converter
version 2.132140",
+ "generated_by" : "ExtUtils::MakeMaker version 7, CPAN::Meta::Converter
version 2.142690",
"license" : [
"perl_5"
],
@@ -54,5 +54,5 @@
"url" :
"http://git.profvince.com/?p=perl%2Fmodules%2Fautovivification.git"
}
},
- "version" : "0.12"
+ "version" : "0.14"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/META.yml
new/autovivification-0.14/META.yml
--- old/autovivification-0.12/META.yml 2013-09-05 19:05:14.000000000 +0200
+++ new/autovivification-0.14/META.yml 2014-11-01 23:21:29.000000000 +0100
@@ -3,30 +3,30 @@
author:
- 'Vincent Pit <[email protected]>'
build_requires:
- Config: 0
- Exporter: 0
- ExtUtils::MakeMaker: 0
- Test::More: 0
- XSLoader: 0
+ Config: '0'
+ Exporter: '0'
+ ExtUtils::MakeMaker: '0'
+ Test::More: '0'
+ XSLoader: '0'
configure_requires:
- ExtUtils::MakeMaker: 0
+ ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.74, CPAN::Meta::Converter version
2.132140'
+generated_by: 'ExtUtils::MakeMaker version 7, CPAN::Meta::Converter version
2.142690'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: autovivification
no_index:
directory:
- t
- inc
requires:
- XSLoader: 0
- perl: 5.008003
+ XSLoader: '0'
+ perl: '5.008003'
resources:
bugtracker: http://rt.cpan.org/Dist/Display.html?Name=autovivification
homepage: http://search.cpan.org/dist/autovivification/
license: http://dev.perl.org/licenses/
repository: http://git.profvince.com/?p=perl%2Fmodules%2Fautovivification.git
-version: 0.12
+version: '0.14'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/Makefile.PL
new/autovivification-0.14/Makefile.PL
--- old/autovivification-0.12/Makefile.PL 2013-08-29 01:18:21.000000000
+0200
+++ new/autovivification-0.14/Makefile.PL 2014-10-13 14:34:22.000000000
+0200
@@ -97,3 +97,12 @@
},
%macro,
);
+
+package MY;
+
+sub postamble {
+ return <<'POSTAMBLE';
+testdeb: all
+ PERL_DL_NONLAZY=1 PERLDB_OPTS="NonStop=1" $(FULLPERLRUN) -MTAP::Harness
-e 'TAP::Harness->new({verbosity => q{$(VERBOSE)}, lib => [ q{$(INST_LIB)},
q{$(INST_ARCHLIB)} ], switches => [ q{-d} ]})->runtests(@ARGV)' $(TEST_FILES)
+POSTAMBLE
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/README
new/autovivification-0.14/README
--- old/autovivification-0.12/README 2013-09-05 19:05:14.000000000 +0200
+++ new/autovivification-0.14/README 2014-11-01 23:21:30.000000000 +0100
@@ -2,7 +2,7 @@
autovivification - Lexically disable autovivification.
VERSION
- Version 0.12
+ Version 0.14
SYNOPSIS
no autovivification;
@@ -138,6 +138,11 @@
where it is false for perl 5.10.0 and below.
CAVEATS
+ Using this pragma will cause a slight global slowdown of any subsequent
+ compilation phase that happens anywere in your code - even outside of
+ the scope of use of "no autovivification" - which may become noticeable
+ if you rely heavily on numerous calls to "eval STRING".
+
The pragma doesn't apply when one dereferences the returned value of an
array or hash slice, as in "@array[$id]->{member}" or
@hash{$key}->{member}. This syntax is valid Perl, yet it is discouraged
@@ -145,6 +150,10 @@
context. If warnings are turned on, Perl will complain about one-element
slices.
+ Autovivifications that happen in code "eval"'d during the global
+ destruction phase of a spawned thread or pseudo-fork (the processes used
+ internally for the "fork" emulation on Windows) are not reported.
+
DEPENDENCIES
perl 5.8.3.
@@ -180,7 +189,8 @@
Matt S. Trout asked for it.
COPYRIGHT & LICENSE
- Copyright 2009,2010,2011,2012,2013 Vincent Pit, all rights reserved.
+ Copyright 2009,2010,2011,2012,2013,2014 Vincent Pit, all rights
+ reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/autovivification.xs
new/autovivification-0.14/autovivification.xs
--- old/autovivification-0.12/autovivification.xs 2013-08-29
01:18:21.000000000 +0200
+++ new/autovivification-0.14/autovivification.xs 2014-11-01
23:14:17.000000000 +0100
@@ -29,6 +29,10 @@
# define A_HAS_RPEEP A_HAS_PERL(5, 13, 5)
#endif
+#ifndef OP_SIBLING
+# define OP_SIBLING(O) ((O)->op_sibling)
+#endif
+
/* ... Thread safety and multiplicity ...................................... */
/* Always safe when the workaround isn't needed */
@@ -210,17 +214,40 @@
#endif /* A_WORKAROUND_REQUIRE_PROPAGATION */
-#include "reap.h"
-
STATIC void a_thread_cleanup(pTHX_ void *ud) {
dMY_CXT;
#if A_WORKAROUND_REQUIRE_PROPAGATION
ptable_hints_free(MY_CXT.tbl);
+ MY_CXT.tbl = NULL;
#endif /* A_WORKAROUND_REQUIRE_PROPAGATION */
ptable_seen_free(MY_CXT.seen);
+ MY_CXT.seen = NULL;
+}
+
+STATIC int a_endav_free(pTHX_ SV *sv, MAGIC *mg) {
+ SAVEDESTRUCTOR_X(a_thread_cleanup, NULL);
+
+ return 0;
}
+STATIC MGVTBL a_endav_vtbl = {
+ 0,
+ 0,
+ 0,
+ 0,
+ a_endav_free
+#if MGf_COPY
+ , 0
+#endif
+#if MGf_DUP
+ , 0
+#endif
+#if MGf_LOCAL
+ , 0
+#endif
+};
+
#endif /* A_THREADSAFE */
#if A_WORKAROUND_REQUIRE_PROPAGATION
@@ -272,19 +299,22 @@
STATIC SV *a_tag(pTHX_ UV bits) {
#define a_tag(B) a_tag(aTHX_ (B))
a_hint_t *h;
+#if A_THREADSAFE
+ dMY_CXT;
+
+ if (!MY_CXT.tbl)
+ return newSViv(0);
+#endif /* A_THREADSAFE */
h = PerlMemShared_malloc(sizeof *h);
h->bits = bits;
h->require_tag = a_require_tag();
#if A_THREADSAFE
- {
- dMY_CXT;
- /* We only need for the key to be an unique tag for looking up the value
later
- * Allocated memory provides convenient unique identifiers, so that's why we
- * use the hint as the key itself. */
- ptable_hints_store(MY_CXT.tbl, h, h);
- }
+ /* We only need for the key to be an unique tag for looking up the value later
+ * Allocated memory provides convenient unique identifiers, so that's why we
+ * use the hint as the key itself. */
+ ptable_hints_store(MY_CXT.tbl, h, h);
#endif /* A_THREADSAFE */
return newSViv(PTR2IV(h));
@@ -293,16 +323,19 @@
STATIC UV a_detag(pTHX_ const SV *hint) {
#define a_detag(H) a_detag(aTHX_ (H))
a_hint_t *h;
+#if A_THREADSAFE
+ dMY_CXT;
+
+ if (!MY_CXT.tbl)
+ return 0;
+#endif /* A_THREADSAFE */
if (!(hint && SvIOK(hint)))
return 0;
h = INT2PTR(a_hint_t *, SvIVX(hint));
#if A_THREADSAFE
- {
- dMY_CXT;
- h = ptable_fetch(MY_CXT.tbl, h);
- }
+ h = ptable_fetch(MY_CXT.tbl, h);
#endif /* A_THREADSAFE */
if (a_require_tag() != h->require_tag)
@@ -900,7 +933,7 @@
case OP_HSLICE:
old_ck = a_old_ck_hslice;
if (hint & A_HINT_DO)
- a_recheck_rv2xv(cUNOPo->op_first->op_sibling, OP_RV2HV, a_pp_rv2hv);
+ a_recheck_rv2xv(OP_SIBLING(cUNOPo->op_first), OP_RV2HV, a_pp_rv2hv);
break;
}
o = old_ck(aTHX_ o);
@@ -980,11 +1013,23 @@
const a_op_info *oi = NULL;
UV flags = 0;
+#if !A_HAS_RPEEP
if (ptable_fetch(seen, o))
break;
ptable_seen_store(seen, o, o);
+#endif
switch (o->op_type) {
+#if A_HAS_RPEEP
+ case OP_NEXTSTATE:
+ case OP_DBSTATE:
+ case OP_STUB:
+ case OP_UNSTACK:
+ if (ptable_fetch(seen, o))
+ return;
+ ptable_seen_store(seen, o, o);
+ break;
+#endif
case OP_PADSV:
if (o->op_ppaddr != a_pp_deref) {
oi = a_map_fetch(o);
@@ -1073,9 +1118,11 @@
a_old_peep(aTHX_ o);
- ptable_seen_clear(seen);
- a_peep_rec(o);
- ptable_seen_clear(seen);
+ if (seen) {
+ ptable_seen_clear(seen);
+ a_peep_rec(o);
+ ptable_seen_clear(seen);
+ }
}
/* --- Interpreter setup/teardown ------------------------------------------ */
@@ -1096,8 +1143,10 @@
dMY_CXT;
# if A_THREADSAFE && A_WORKAROUND_REQUIRE_PROPAGATION
ptable_hints_free(MY_CXT.tbl);
+ MY_CXT.tbl = NULL;
# endif /* A_THREADSAFE && A_WORKAROUND_REQUIRE_PROPAGATION */
ptable_seen_free(MY_CXT.seen);
+ MY_CXT.seen = NULL;
}
a_ck_restore(OP_PADANY, &a_old_ck_padany);
@@ -1222,10 +1271,11 @@
ptable *t;
#endif
ptable *s;
+ GV *gv;
PPCODE:
{
- dMY_CXT;
#if A_WORKAROUND_REQUIRE_PROPAGATION
+ dMY_CXT;
{
a_ptable_clone_ud ud;
@@ -1245,7 +1295,23 @@
#endif
MY_CXT.seen = s;
}
- reap(3, a_thread_cleanup, NULL);
+ gv = gv_fetchpv(__PACKAGE__ "::_THREAD_CLEANUP", 0, SVt_PVCV);
+ if (gv) {
+ CV *cv = GvCV(gv);
+ if (!PL_endav)
+ PL_endav = newAV();
+ SvREFCNT_inc(cv);
+ if (!av_store(PL_endav, av_len(PL_endav) + 1, (SV *) cv))
+ SvREFCNT_dec(cv);
+ sv_magicext((SV *) PL_endav, NULL, PERL_MAGIC_ext, &a_endav_vtbl, NULL, 0);
+ }
+ XSRETURN(0);
+
+void
+_THREAD_CLEANUP(...)
+PROTOTYPE: DISABLE
+PPCODE:
+ a_thread_cleanup(aTHX_ NULL);
XSRETURN(0);
#endif /* A_THREADSAFE */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/lib/autovivification.pm
new/autovivification-0.14/lib/autovivification.pm
--- old/autovivification-0.12/lib/autovivification.pm 2013-09-05
19:03:09.000000000 +0200
+++ new/autovivification-0.14/lib/autovivification.pm 2014-11-01
23:16:15.000000000 +0100
@@ -11,13 +11,13 @@
=head1 VERSION
-Version 0.12
+Version 0.14
=cut
our $VERSION;
BEGIN {
- $VERSION = '0.12';
+ $VERSION = '0.14';
}
=head1 SYNOPSIS
@@ -200,10 +200,14 @@
=head1 CAVEATS
+Using this pragma will cause a slight global slowdown of any subsequent
compilation phase that happens anywere in your code - even outside of the scope
of use of C<no autovivification> - which may become noticeable if you rely
heavily on numerous calls to C<eval STRING>.
+
The pragma doesn't apply when one dereferences the returned value of an array
or hash slice, as in C<< @array[$id]->{member} >> or C<< @hash{$key}->{member}
>>.
This syntax is valid Perl, yet it is discouraged as the slice is here useless
since the dereferencing enforces scalar context.
If warnings are turned on, Perl will complain about one-element slices.
+Autovivifications that happen in code C<eval>'d during the global destruction
phase of a spawned thread or pseudo-fork (the processes used internally for the
C<fork> emulation on Windows) are not reported.
+
=head1 DEPENDENCIES
L<perl> 5.8.3.
@@ -242,7 +246,7 @@
=head1 COPYRIGHT & LICENSE
-Copyright 2009,2010,2011,2012,2013 Vincent Pit, all rights reserved.
+Copyright 2009,2010,2011,2012,2013,2014 Vincent Pit, all rights reserved.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/reap.h
new/autovivification-0.14/reap.h
--- old/autovivification-0.12/reap.h 2011-01-05 19:24:25.000000000 +0100
+++ new/autovivification-0.14/reap.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,81 +0,0 @@
-/* This file is part of the autovivification Perl module.
- * See http://search.cpan.org/dist/autovivification/ */
-
-/* This header provides a specialized version of Scope::Upper::reap that can be
- * called directly from XS.
- * See http://search.cpan.org/dist/Scope-Upper/ for details. */
-
-#ifndef REAP_H
-#define REAP_H 1
-
-#define REAP_DESTRUCTOR_SIZE 3
-
-typedef struct {
- I32 depth;
- I32 *origin;
- void (*cb)(pTHX_ void *);
- void *ud;
- char *dummy;
-} reap_ud;
-
-STATIC void reap_pop(pTHX_ void *);
-
-STATIC void reap_pop(pTHX_ void *ud_) {
- reap_ud *ud = ud_;
- I32 depth, *origin, mark, base;
-
- depth = ud->depth;
- origin = ud->origin;
- mark = origin[depth];
- base = origin[depth - 1];
-
- if (base < mark) {
- PL_savestack_ix = mark;
- leave_scope(base);
- }
- PL_savestack_ix = base;
-
- if ((ud->depth = --depth) > 0) {
- SAVEDESTRUCTOR_X(reap_pop, ud);
- } else {
- void (*cb)(pTHX_ void *) = ud->cb;
- void *cb_ud = ud->ud;
-
- PerlMemShared_free(ud->origin);
- PerlMemShared_free(ud);
-
- SAVEDESTRUCTOR_X(cb, cb_ud);
- }
-}
-
-STATIC void reap(pTHX_ I32 depth, void (*cb)(pTHX_ void *), void *cb_ud) {
-#define reap(D, CB, UD) reap(aTHX_ (D), (CB), (UD))
- reap_ud *ud;
- I32 i;
-
- if (depth > PL_scopestack_ix)
- depth = PL_scopestack_ix;
-
- ud = PerlMemShared_malloc(sizeof *ud);
- ud->depth = depth;
- ud->origin = PerlMemShared_malloc((depth + 1) * sizeof *ud->origin);
- ud->cb = cb;
- ud->ud = cb_ud;
- ud->dummy = NULL;
-
- for (i = depth; i >= 1; --i) {
- I32 j = PL_scopestack_ix - i;
- ud->origin[depth - i] = PL_scopestack[j];
- PL_scopestack[j] += REAP_DESTRUCTOR_SIZE;
- }
- ud->origin[depth] = PL_savestack_ix;
-
- while (PL_savestack_ix + REAP_DESTRUCTOR_SIZE
- <= PL_scopestack[PL_scopestack_ix - 1])
{
- save_pptr(&ud->dummy);
- }
-
- SAVEDESTRUCTOR_X(reap_pop, ud);
-}
-
-#endif /* REAP_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/t/43-peep.t
new/autovivification-0.14/t/43-peep.t
--- old/autovivification-0.12/t/43-peep.t 2011-01-05 19:24:25.000000000
+0100
+++ new/autovivification-0.14/t/43-peep.t 2014-11-01 22:25:51.000000000
+0100
@@ -1,9 +1,14 @@
-#!perl -T
+#!perl
use strict;
use warnings;
-use Test::More tests => 11 + 6 * 3;
+use Test::More;
+
+use lib 't/lib';
+use VPIT::TestHelpers;
+
+plan tests => 11 + 5 * 2 + 5 * 3;
{
my $desc = 'peephole optimization of conditionals';
@@ -108,26 +113,57 @@
}
{
- my $desc = 'peephole optimization of empty loops (RT #64435)';
- my $x;
-
- local $@;
- my $code = eval <<' TESTCASE';
- no autovivification;
- sub {
+ my $base_desc = 'peephole optimization of infinite';
+ my %infinite_tests = (
+ "$base_desc for loops (RT #64435)" => <<' TESTCASE',
+ no autovivification;
my $ret = 0;
for (;;) {
++$ret;
- return $ret;
+ exit $ret;
}
- return $ret;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->();
- is_deeply $x, undef, "$desc did not autovivify";
- is $ret, 1, "$desc returned 1";
+ exit $ret;
+ TESTCASE
+ "$base_desc while loops" => <<' TESTCASE',
+ no autovivification;
+ my $ret = 0;
+ while (1) {
+ ++$ret;
+ exit $ret;
+ }
+ exit $ret;
+ TESTCASE
+ "$base_desc postfix while (RT #99458)" => <<' TESTCASE',
+ no autovivification;
+ my $ret = 0;
+ ++$ret && exit $ret while 1;
+ exit $ret;
+ TESTCASE
+ "$base_desc until loops" => <<' TESTCASE',
+ no autovivification;
+ my $ret = 0;
+ until (0) {
+ ++$ret;
+ exit $ret;
+ }
+ exit $ret;
+ TESTCASE
+ "$base_desc postfix until" => <<' TESTCASE',
+ no autovivification;
+ my $ret = 0;
+ ++$ret && exit $ret until 0;
+ exit $ret;
+ TESTCASE
+ );
+
+ for my $desc (keys %infinite_tests) {
+ my $code = $infinite_tests{$desc};
+ my $ret = run_perl $code;
+ my $stat = $ret & 255;
+ $ret >>= 8;
+ is $stat, 0, "$desc testcase did not crash";
+ is $ret, 1, "$desc compiled fine";
+ }
}
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/t/51-threads-teardown.t
new/autovivification-0.14/t/51-threads-teardown.t
--- old/autovivification-0.12/t/51-threads-teardown.t 2013-08-29
01:18:21.000000000 +0200
+++ new/autovivification-0.14/t/51-threads-teardown.t 2014-10-13
14:34:22.000000000 +0200
@@ -4,20 +4,10 @@
use warnings;
use lib 't/lib';
+use VPIT::TestHelpers;
use autovivification::TestThreads;
-use Test::Leaner tests => 1;
-
-sub run_perl {
- my $code = shift;
-
- my ($SystemRoot, $PATH) = @ENV{qw<SystemRoot PATH>};
- local %ENV;
- $ENV{SystemRoot} = $SystemRoot if $^O eq 'MSWin32' and defined $SystemRoot;
- $ENV{PATH} = $PATH if $^O eq 'cygwin' and defined $PATH;
-
- system { $^X } $^X, '-T', map("-I$_", @INC), '-e', $code;
-}
+use Test::Leaner tests => 2;
SKIP:
{
@@ -37,3 +27,21 @@
RUN
is $status, 0, 'loading the pragma in a thread and using it outside doesn\'t
segfault';
}
+
+{
+ my $status = run_perl <<' RUN';
+ use threads;
+ BEGIN { require autovivification; }
+ sub X::DESTROY {
+ eval 'no autovivification; my $x; my $y = $x->{foo}{bar}; use
autovivification; my $z = $x->{a}{b}{c};';
+ exit 1 if $@;
+ }
+ threads->create(sub {
+ my $x = bless { }, 'X';
+ $x->{self} = $x;
+ return;
+ })->join;
+ exit $code;
+ RUN
+ is $status, 0, 'autovivification can be loaded in eval STRING during global
destruction at the end of a thread';
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/autovivification-0.12/t/lib/VPIT/TestHelpers.pm
new/autovivification-0.14/t/lib/VPIT/TestHelpers.pm
--- old/autovivification-0.12/t/lib/VPIT/TestHelpers.pm 2013-06-03
15:26:08.000000000 +0200
+++ new/autovivification-0.14/t/lib/VPIT/TestHelpers.pm 2014-10-13
14:34:22.000000000 +0200
@@ -3,9 +3,12 @@
use strict;
use warnings;
+use Config ();
+
my %exports = (
load_or_skip => \&load_or_skip,
load_or_skip_all => \&load_or_skip_all,
+ run_perl => \&run_perl,
skip_all => \&skip_all,
);
@@ -102,6 +105,21 @@
return $loaded;
}
+sub run_perl {
+ my $code = shift;
+
+ my ($SystemRoot, $PATH) = @ENV{qw<SystemRoot PATH>};
+ my $ld_name = $Config::Config{ldlibpthname};
+ my $ldlibpth = $ENV{$ld_name};
+
+ local %ENV;
+ $ENV{SystemRoot} = $SystemRoot if $^O eq 'MSWin32' and defined $SystemRoot;
+ $ENV{PATH} = $PATH if $^O eq 'cygwin' and defined $PATH;
+ $ENV{$ld_name} = $ldlibpth if $^O eq 'android' and defined $ldlibpth;
+
+ system { $^X } $^X, '-T', map("-I$_", @INC), '-e', $code;
+}
+
package VPIT::TestHelpers::Guard;
sub new {