This is a live mirror of the Perl 5 development currently hosted at
6 years ago[MERGE] faster arithmetic
David Mitchell [Tue, 10 Nov 2015 13:50:51 +0000 (13:50 +0000)]
[MERGE] faster arithmetic

6 years agosplit pp_postdec() from pp_postinc() and improve
David Mitchell [Sun, 25 Oct 2015 18:28:14 +0000 (18:28 +0000)]
split pp_postdec() from pp_postinc() and improve

pp_postinc() handles both $x++ and $x-- (and the integer variants
pp_i_postinc/dec). Split it into two separate functions, as handling
both inc and dec in the same function requires 3 extra conditionals.

At the same time make the code more efficient.

As currently written it:
1) checked for "bad" SVs (such as read-only) and croaked;
2) did a sv_setsv(TARG, TOPs) to return a copy of the original value;
2) checked for a IOK-only SV and if so, directly incremented the IVX slot;
3) else called out to sv_inc/dec() to handle the more complex cases.

This commit combines the checks in (1) and (3) into one single big
check of flags, and for the simple integer case, skips 2) and does
a more efficient SETi() instead.
For the non-simple case, both pp_postinc() and pp_postdec() now call a
common static function to handle everything else.

Porting/ shows the following raw numbers for
'$y = $x++' ($x and $y lexical and holding integers):

         before    after
         ------    -----
    Ir    306.0    223.0
    Dr    106.0     82.0
    Dw     51.0     44.0
  COND     48.0     33.0
   IND      8.0      6.0

COND_m      1.9      0.0
 IND_m      4.0      4.0

6 years agosplit pp_predec() from pp_preinc() and improve
David Mitchell [Sun, 25 Oct 2015 08:41:50 +0000 (08:41 +0000)]
split pp_predec() from pp_preinc() and improve

pp_preinc() handles both ++$x and --$x (and the integer variants
pp_i_preinc/dec). Split it into two separate functions, as handling
both inc and dec in the same function requires 3 extra conditionals.

At the same time make the code more efficient.

As currently written it:
1) checked for "bad" SVs (such as read-only) and croaked;
2) checked for a IOK-only SV and directly incremented the IVX slot;
3) else called out to sv_inc() to handle the more complex cases.

This commit combines the checks in (1) and (2) into one single big
check of flags, and anything "bad" simply skips the IOK-only code
and calls sv_dec(), which can do its own checking of read-only etc
and croak if necessary. Porting/ shows the following raw numbers
for ++$x ($x lexical and holding an integer):

         before    after
       -------- --------
    Ir     77.0     56.0
    Dr     30.0     24.0
    Dw     10.0     10.0
  COND     12.0      9.0
   IND      2.0      2.0

COND_m     -0.1      0.0
 IND_m      2.0      2.0

Even having split the function into two, the combined size of the two new
functions is smaller than the single previous function.

6 years agofaster add, subtract, multiply
David Mitchell [Thu, 22 Oct 2015 11:04:40 +0000 (12:04 +0100)]
faster add, subtract, multiply

In pp_add, pp_subtract and pp_multiply, special-case the following:

* both args IV, neither arg large enough to under/overflow
* both args NV.

Starting in 5.8.0, the implementation of the arithmetic pp functions
became a lot more complex (and famously, much slower), due to the need
to support 64-bit integers.

For example, formerly  pp_add just converted both its args to an NV and
returned an NV. On 64-bit systems, that could gave bad results if the
mantissa of an NV was < 64 bits; for example:

    $ perl561 -e'$x = 0x1000000000000000; printf "%x\n", $x+1'
    $ perl580 -e'$x = 0x1000000000000000; printf "%x\n", $x+1'

This led to a lot of complex code that covered all the possibilities
of overflow etc.

This commit adds some special casing to these three common arithmetic ops.
It does some quick checks (mainly involving fast boolean and bit ops)
to determine if both args are valid IVs (and not UVs), are not magic,
and aren't very big (+ve or -ve). In this case, the result is simply
SvIVX(svl) + SvIVX(svr) (or - or *) with no possibility of overflow.
Failing that, if both args are NV's and not magic, then if both NVs
can be converted to IVs without loss, handle as for the IV case; failing
that, just return SvNVX(svl) + SvNVX(svr);

For all other cases, such as mixed IV and NV or PV, fall back to the old

On my platform (x86_64), it (along with the previous commit) reduces the
execution time of the nbody benchmark (lots of floating-point vector
arithmetic) by a third and in fact makes it 10% faster than 5.6.1.

6 years agomake SETi/u/n, (X)PUSHi/u/n more efficient
David Mitchell [Thu, 22 Oct 2015 15:43:49 +0000 (16:43 +0100)]
make SETi/u/n, (X)PUSHi/u/n more efficient

These macros are used by many pp functions to set TARG to an int or float
value and put it on the stack. The macros use a call to sv_setiv()
or similar.

However, there is a good chance that the target is ether a lexical var
or a PADTMP that has been assigned just an IV/NV in the past, in which
case its body is likely to still be of type SVt_IV/SVt_NV. If this is
the case, we can set its value much more efficiently.

Update those setting macros to first check if the target has a simple
body, and if so, set directly.

This makes quite a significant performance difference on code that does
a lot of arithmetic, at the cost of a larger binary (0.36% on my Linux
x86_64 system).

It also allows you (at compile time) to skip testing for taint if you
know that the value can't be tainted (e.g. pp_add() when both args are
non-magical and so can't have taint magic attached). The next commit will
make use of this.

Includes a couple of efficiency tweaks suggested by Daniel Dragan.

6 years agoavoid (TAINTING_get && TAINT_get)
David Mitchell [Fri, 30 Oct 2015 13:44:11 +0000 (13:44 +0000)]
avoid (TAINTING_get && TAINT_get)

In various places we test for both (PL_tainting && PL_tainted).
Since if tainting isn't enabled PL_tainted should never get set, it's
more efficient to just test for (TAINT_get).

We ensure that PL_tainted doesn't actually get set when !PL_tainting
by changing some "setting" macros from PL_tainted = TRUE to
PL_tainted = PL_tainting.

6 years agobase: prepare to make a new CPAN release
Ricardo Signes [Mon, 9 Nov 2015 22:40:51 +0000 (17:40 -0500)]
base: prepare to make a new CPAN release

...eliminates some unneeded files, adds a Makefile.PL (for the
INSTALLDIRS-picking behavior).

6 years agoMARK -Ds debugging
Reini Urban [Mon, 16 Mar 2015 09:27:37 +0000 (10:27 +0100)]
MARK -Ds debugging

display the MARK arity and pointers with MARK macros.
assert on markptr underflow.

6 years agoperlexperiment.pod: use consistent style for Perl versions
Aaron Crane [Tue, 10 Nov 2015 01:22:13 +0000 (01:22 +0000)]
perlexperiment.pod: use consistent style for Perl versions

6 years agoMention warning categories for removed experimental features
Aaron Crane [Tue, 10 Nov 2015 01:16:28 +0000 (01:16 +0000)]
Mention warning categories for removed experimental features

This seems likely to be helpful for future code archæologists.

The string "autoderef" string didn't previously appear in perlexperiment.pod;
that looks like an oversight.

6 years agoUpdate perlexperiment for removal of lexical topic and autoderef
Dagfinn Ilmari Mannsåker [Mon, 9 Nov 2015 16:51:47 +0000 (16:51 +0000)]
Update perlexperiment for removal of lexical topic and autoderef

6 years agot/op/utf8decode.t: print debugging info if test fails
Karl Williamson [Mon, 9 Nov 2015 05:59:51 +0000 (22:59 -0700)]
t/op/utf8decode.t: print debugging info if test fails

6 years agoutf8.h: Move #define within file
Karl Williamson [Thu, 29 Oct 2015 15:27:48 +0000 (09:27 -0600)]
utf8.h: Move #define within file

This #define has, until the next commit, not been needed on EBCDIC
platforms; move it in preparation for that commit.

6 years agoutf8.h, utfebcdic.h: Use mnemonic constant
Karl Williamson [Fri, 30 Oct 2015 02:32:08 +0000 (20:32 -0600)]
utf8.h, utfebcdic.h: Use mnemonic constant

The magic number 13 is used in various places on ASCII platforms, and
7 correspondingly on EBCDIC.  This moves the #defines for what these
represent to early in their files, and uses the symbolic name

6 years agoutf8.h: Reformat a couple of table lines
Karl Williamson [Fri, 30 Oct 2015 02:24:14 +0000 (20:24 -0600)]
utf8.h: Reformat a couple of table lines

This is just an aesthetic issue, hopefully making things clearer.

6 years agore/pat_advanced.t: Fix a test so also runs on EBCDIC
Karl Williamson [Sun, 25 Oct 2015 02:08:47 +0000 (20:08 -0600)]
re/pat_advanced.t: Fix a test so also runs on EBCDIC

6 years agoDevel::Peek: document that uses STDERR
Karl Williamson [Sun, 25 Oct 2015 02:04:17 +0000 (20:04 -0600)]
Devel::Peek: document that uses STDERR

6 years ago[perl #126469] document the ob parameter to sv_reftype()
Tony Cook [Thu, 29 Oct 2015 04:07:09 +0000 (15:07 +1100)]
[perl #126469] document the ob parameter to sv_reftype()

6 years agomake sv_ref() part of the API
Tony Cook [Thu, 29 Oct 2015 04:05:59 +0000 (15:05 +1100)]
make sv_ref() part of the API

The existing sv_reftype() returns the class of a blessed SV only
as a const char *, so we can't tell if it's UTF8 or not.

This probably should have been API from the beginning.

6 years agocygwin: look harder for a C: mapping and skip if we don't find it
Tony Cook [Mon, 12 Oct 2015 03:02:33 +0000 (14:02 +1100)]
cygwin: look harder for a C: mapping and skip if we don't find it

Some recent update to df on cygwin changed the output from listing
all mappings for the drive with cygwin installed on it to listing
only the root directory, eg from:

$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
C:/cygwin/bin   76943280 45410396  31532884  60% /usr/bin
C:/cygwin/lib   76943280 45410396  31532884  60% /usr/lib
C:/cygwin       76943280 45410396  31532884  60% /
C:              76943280 45410396  31532884  60% /cygdrive/c


$ df
Filesystem      1K-blocks       Used  Available Use% Mounted on
C:/cygwin      1953411068 1261572900  691838168  65% /

which meant the test used an incorrect fallback value.

So force df to display all the mappings, handle the differently
formatted mapping correctly, and if all that fails, skip the test.

6 years agoperl #126586 hexfp may lose 1-3 low order bits (most often, 1)
Jarkko Hietaniemi [Sat, 7 Nov 2015 19:38:21 +0000 (14:38 -0500)]
perl #126586 hexfp may lose 1-3 low order bits (most often, 1)

6 years agoperl #126582 hexfp overflow drops hi-order bits
Jarkko Hietaniemi [Fri, 6 Nov 2015 23:54:16 +0000 (18:54 -0500)]
perl #126582 hexfp overflow drops hi-order bits

6 years agoCarp: stable CPAN release
Ricardo Signes [Fri, 6 Nov 2015 14:54:52 +0000 (09:54 -0500)]
Carp: stable CPAN release

6 years agoDumpvalue: Generalize for non-ASCII platforms
Karl Williamson [Sun, 25 Oct 2015 02:03:31 +0000 (20:03 -0600)]
Dumpvalue: Generalize for non-ASCII platforms

I overlooked this module until now.  It turns out that much of the code
I had changed had a common ancestor with the code I had already changed
to work on non-ASCII platforms in lib/  So I just copied
that, changing the things that needed to be different.

It appears that Dumpvalue had a bug, in that it did not escape NUL, of
all the C0 controls.  I changed it to do so.

6 years agoUpdate other win32/ makefiles as per eb840d4ab6
Steve Hay [Thu, 5 Nov 2015 17:36:11 +0000 (17:36 +0000)]
Update other win32/ makefiles as per eb840d4ab6

6 years agoremove useless build product /win32/config.w32
Daniel Dragan [Wed, 4 Nov 2015 22:28:06 +0000 (17:28 -0500)]
remove useless build product /win32/config.w32

CFGSH_TMPL (config.gc or is not written to by config_sh.PL, so
there is no need to make a copy of it, this reduces 1 target node out of
dmake so there are less targets to traverse for dep checking, this also
fixes an "dmake -n" schedule irregularity where
"copy $(CFGSH_TMPL) config.w32" was scheduled (for serial) as the very
first recipie to run by dmake for a "dmake -n Extensions" but a recipie
in the middle of the procs to launch for "dmake -n Extensions_nonxs". This
schedule irregularity might be causing delays in finding parallel work to
do. Also arrange ..\ target's deps from "on disk" to
"build product" order, so the left side dep nodes get marked "completed"
ASAP in the graph.

  --- C:\p523\src\win32\xs.txt
  +++ C:\p523\src\win32\nonxs.txt
  @@ -1,3 +1,4 @@
  +copy config.w32
   if not exist ".\mini" mkdir ".\mini"
   if exist config.h del /f config.h
   copy config.h
  @@ -141,20 +142,11 @@
   if exist ..\miniperl.exe.manifest mt -nologo -manifest **CUT**
   ..\miniperl.exe -I..\lib -f ..\ ..
  -copy config.w32
   ..\miniperl.exe -I..\lib config_sh.PL --cfgsh-option-file \
        C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mk32 config.w32 > ..\
   ..\miniperl.exe -I..\lib ..\configpm --chdir=..
   xcopy /f /r /i /d /y config.h ..\lib\CORE\*.*
   ..\miniperl.exe -I..\lib config_h.PL "ARCHPREFIX="

[Committer indented above diff to allow "git am" to apply the patch.]

6 years agore-parallelize Win32 build after Unicode::Normalize got XS
Daniel Dragan [Thu, 5 Nov 2015 03:34:54 +0000 (22:34 -0500)]
re-parallelize Win32 build after Unicode::Normalize got XS

commit 57dca39807 serialized the 1st and 3rd longest targets (Extensions
and UNIDATAFILES aka mktables) together after commit c6b7cc2176 which
upgraded Unicode::Normalize, and  Unicode::Normalize went from PP->XS,
and the XS version requires unicore/ in
cpan/Unicode-Normalize/mkheader during U::N's building. The serialization
added about 32 second to a "dmake -P8 all" on a 8 core machine. Fix this
by spltting off U::N from Extensions and put it in its own target. Making
Extensions, the longest target slightly shorter by removing 1 module
from its workload is another plus. See perl #126564 for time savings details.

[Committer filled in RT ticket number in commit message.]

6 years agoUpdate Pod-Simple to CPAN version 3.32
Chris 'BinGOs' Williams [Tue, 3 Nov 2015 12:56:07 +0000 (12:56 +0000)]
Update Pod-Simple to CPAN version 3.32


2015-11-02   Marc Green <>
  * Release 3.32
  Fixed failing tests on Windows. Thanks to A. Sinan Unur for the

  Switched debugging output from STDOUT to STDERR. Should rarely be
  used, but modules that do depend on debugging output might need to
  change how they handle it. Patch from Karl Williamson (GitHub Pull
  Request #76).

  Added errata_seen() to make POD errors easily accessible. Thanks to
  Sean Zellmer for the pull request!

2015-08-23   Marc Green <>
  * Release 3.31
  No changes since 3.30_1.

2015-07-19   Marc Green <>
  * Release 3.30_1
  Simplified the detection of case-insensitivity in Pod::Simple::Search.

  Fixed "Use of uninitialized value $1 in lc" warning in

  If @INC includes the current directory symbol, '.', the survey()
  method of Pod::Simple::Search no longer excludes it from its list
  of directories to search. Instead, The survey() and find() methods
  now both exclude duplicate directories from @INC (RT #102344).

  Moved source repository and updated links to new perl-pod GitHub

  Improved repository links and added GitHub issue tracking link to
  the distribution metadata.

  Switched from File::Spec's catdir to catfile for path names, to
  fix failures on VMS. Also now use Unix path semantics where
  they're not required to be platform-specific. Thanks to Craig A.
  Berry for the patch (RT #105511).

  Improved the example use of the 'html_encode_chars()' method in
  the Pod::Simple::XHTML documentation. Patch from Randy Stauner.

6 years agoAllow overriding the compile time in "perl -V" output
Niko Tyni [Sun, 12 Jul 2015 19:23:00 +0000 (22:23 +0300)]
Allow overriding the compile time in "perl -V" output

The C preprocessor macros __DATE__ and __TIME__ embed the compile time
into the binary for the purposes of "perl -V" output. This makes the
build unreproducible: compiling the same source with the same toolchain
cannot be made to yield bitwise identical binaries and other generated

The compile time can now be overridden with the PERL_BUILD_DATE macro.

Patch-Name: debian/do-not-record-build-date.diff

6 years agoremove XSLoader and DynaLoader OS specific code on NA OSes
Daniel Dragan [Sat, 31 Oct 2015 10:53:54 +0000 (06:53 -0400)]
remove XSLoader and DynaLoader OS specific code on NA OSes

@dl_resolve_using is only used on dld/freemint, and HPUX shlib loader OSes.
Dont create the array and glob on OSes where @dl_resolve_using is ignored.

sub dl_undef_symbols is only implmented on dld and freemint (freemint is
dld under a different name), otherwise it always returns empty list. Dont
call the sub on OSes where we knows it's constant retval. Saves ops+compile
time for sub bootstrap.

6 years agoremove remains of dl_dld.xs
Daniel Dragan [Fri, 30 Oct 2015 05:47:20 +0000 (01:47 -0400)]
remove remains of dl_dld.xs

dl_dld.xs was removed in 5.19.4 in commit 1e5d7f5401

6 years agoUpdate Math-BigInt-FastCalc to CPAN version 0.35
Chris 'BinGOs' Williams [Mon, 2 Nov 2015 13:46:26 +0000 (13:46 +0000)]
Update Math-BigInt-FastCalc to CPAN version 0.35


2015-10-28 v0.35 pjacklam
  * Sync test files with Math-BigInt-1.999707.
  * Update the README file.
  * Replace 'use vars ...' with 'our ...'. We require a Perl newer than 5.6.0
  * Required version of Math-BigInt is now 1.999706.
  * Move 'Test::More' from 'build_requires' to 'test_requires' in Makefile.PL.

6 years agoUpdate Getopt-Long to CPAN version 2.48
Chris 'BinGOs' Williams [Mon, 2 Nov 2015 13:41:43 +0000 (13:41 +0000)]
Update Getopt-Long to CPAN version 2.48


Changes in version 2.48

* Fix bug

  Thanks to Roy Ivy III for digging this out and providing patches.

6 years agopp_hot.c: rationalise SvREFCNT_inc_*()
David Mitchell [Mon, 2 Nov 2015 11:11:17 +0000 (11:11 +0000)]
pp_hot.c: rationalise SvREFCNT_inc_*()

Ensure the correct combinations of _simple, _void, _NN are used.
This fixes a couple of void compiler warnings in pp_aassign.

6 years agoUpgrade Math::BigInt from version 1.999706 to 1.999707
Steve Hay [Mon, 2 Nov 2015 08:26:02 +0000 (08:26 +0000)]
Upgrade Math::BigInt from version 1.999706 to 1.999707

6 years agodont install
Daniel Dragan [Sun, 25 Oct 2015 23:31:27 +0000 (19:31 -0400)]
dont install

This shared lib is only used for PPPort testing itself, it is similar to
APItest.dll in purpose. never uses XSLoader/DynaLoader, only its
.t files do. This saves 616KB in the final install dir on Win32, and
atleast one or two dozen KB on all OSes. Since where is auto dir, and what
is arch dir, is complicated and unportable (atleast to me), and what other
files live next to the shared lib (examples, .pdb file, .bs file, .a file)
match the directory fragment, not the files inside of it or the dirs
full path.

 Directory of C:\p523\src\lib\auto\Devel\PPPort

10/25/2015  07:16 PM    <DIR>          .
10/25/2015  07:16 PM    <DIR>          ..
10/25/2015  07:16 PM                 0 .exists
10/25/2015  07:16 PM            59,392 PPPort.dll
10/25/2015  07:16 PM               796 PPPort.exp
10/25/2015  07:16 PM             1,738 PPPort.lib
10/25/2015  07:16 PM           569,344 PPPort.pdb
               5 File(s)        631,270 bytes

6 years agoWorkaround for perl #124212: these functions are not true static inline
Jarkko Hietaniemi [Sun, 1 Nov 2015 17:55:49 +0000 (12:55 -0500)]
Workaround for perl #124212: these functions are not true static inline

By "true" I mean that they have prototypes, but no bodies.

So don't declare their prototypes under PERL_NO_INLINE_FUNCTIONS.

After some studying of
it seems like Perl is trying to implement the "simple portable" model.

But the functions listed as failing during porting/extrefs.t in Tru64:
they are neither fish nor fowl.  Their prototypes are listed in
proto.h as PERL_STATIC_INLINE (which in Tru64 is "static inline"),
but since the test is built with -DPERL_NO_INLINE_FUNCTIONS,
the function bodies (which would be in inline.h) are not visible.
So they end up being body-less static inline prototypes, which is,
I believe, somewhat of an oxymoron.

The "complicated portable" model might be a more wortwhile longer
term goal: in that, there is no "static inline", and there would be
a new source file, say, inline.c.  Now with the "simple portable",
the bodies might end up being compiled multiple times, multiple copies
ending up in different object files, depending on how smart the
compiler/linker is.

Another move could be that maybe there should be no prototypes at all
for inlineables, because having those is kind beside the point.  How
well that would work across different compilers is unknown.

Yet another move, perhaps the simplest one, would be to move these
particular functions away from inline.h.  But this would be just
dodging the larger problems discussed above.

6 years agorestore comma removed by 2f1fe8a307
Lukas Mai [Sun, 1 Nov 2015 12:37:34 +0000 (13:37 +0100)]
restore comma removed by 2f1fe8a307

6 years agofix typo in error message
Lukas Mai [Sat, 31 Oct 2015 19:42:22 +0000 (20:42 +0100)]
fix typo in error message

6 years agoAdd epigraph for 5.22.1-RC1
Steve Hay [Sat, 31 Oct 2015 19:07:14 +0000 (19:07 +0000)]
Add epigraph for 5.22.1-RC1

6 years agoPerl 5.22.1-RC1 today
Steve Hay [Sat, 31 Oct 2015 14:45:43 +0000 (14:45 +0000)]
Perl 5.22.1-RC1 today

6 years agoModule::CoreList updates for 5.22.1
Steve Hay [Sat, 31 Oct 2015 14:18:27 +0000 (14:18 +0000)]
Module::CoreList updates for 5.22.1

6 years agoRemove redundant code in
Craig A. Berry [Sat, 31 Oct 2015 01:58:15 +0000 (20:58 -0500)]
Remove redundant code in

These lines were made redundant by 054a3baf7ca16fe02 so are just
taking up space.

6 years agomake regen for uconfig.h
Jarkko Hietaniemi [Fri, 30 Oct 2015 22:25:51 +0000 (18:25 -0400)]
make regen for uconfig.h

6 years agoRevert "Remove unused filesystem stat symbols."
Jarkko Hietaniemi [Fri, 30 Oct 2015 21:50:42 +0000 (17:50 -0400)]
Revert "Remove unused filesystem stat symbols."

This reverts commit 821805a244cacd9869331999cd53407f3323206a.

What's out, is out.

perl #107904 Filesys-Df
perl #108189 Filesys-DfPortable
perl #108191 Filesys-Statvfs
perl #126368 Filesys-DfPortable

6 years agoperlre: Nits
Karl Williamson [Wed, 21 Oct 2015 23:04:20 +0000 (17:04 -0600)]
perlre: Nits

This mostly adds C<> formatting, but there are a few updates,
clarifications, and grammar-type fixes.

6 years agoPATCH: [perl #126481] panic for !! with syntax error in /(?[...])/
Karl Williamson [Fri, 30 Oct 2015 04:07:11 +0000 (22:07 -0600)]
PATCH: [perl #126481] panic for !! with syntax error in /(?[...])/

This is fixed by not putting two adjacent '!' operators on the stack.
These are the only right-associative operators in the grammar, and they
just cancel each other out.

6 years agoCarp: CPAN release 1.37_02
Ricardo Signes [Fri, 30 Oct 2015 12:17:15 +0000 (08:17 -0400)]
Carp: CPAN release 1.37_02

6 years agoCarp: remove prereq on
Ricardo Signes [Thu, 29 Oct 2015 20:50:03 +0000 (16:50 -0400)]
Carp: remove prereq on

6 years agoUpgrade Math-BigInt from version 1.999705 to 1.999706
Steve Hay [Thu, 29 Oct 2015 13:54:23 +0000 (13:54 +0000)]
Upgrade Math-BigInt from version 1.999705 to 1.999706

6 years agoFor perl #126468: protect quotes in myccflags.
Jarkko Hietaniemi [Wed, 28 Oct 2015 11:56:23 +0000 (07:56 -0400)]
For perl #126468: protect quotes in myccflags.

Fixes a problem introduced by 57d2761b where ccflags contents
with quotes got broken by the quotes getting stripped.

6 years agoUnicode::Normalize needs
Tony Cook [Thu, 29 Oct 2015 03:13:36 +0000 (14:13 +1100)]
Unicode::Normalize needs

This (typically) worked ok for parallel builds, since U::N is built
very late in the XS extensions build process, but for non-parallel
builds the lack of the dependency could result in a build failure.

6 years agoUnicode::Normalize no-go with miniperl.
Jarkko Hietaniemi [Wed, 28 Oct 2015 12:32:33 +0000 (08:32 -0400)]
Unicode::Normalize no-go with miniperl.

Unicode::Normalize comes in via Unicode::UCD, which comes in e.g.
via uni/

Tried using and its skip_all_if_miniperl() in all cases,
but that leads into weird failures in full 'make test'.

6 years agoFix Tie::StdScalar when $instance exists but isn't a 'true' value
Ruud H.G. van Tol [Wed, 28 Oct 2015 14:04:38 +0000 (14:04 +0000)]
Fix Tie::StdScalar when $instance exists but isn't a 'true' value

Patch received from Ruud H.G. van Tol <>.
Committer added ++$VERSION and Porting/ change.

6 years agodocument -O change to Configure
Ricardo Signes [Wed, 28 Oct 2015 15:18:59 +0000 (11:18 -0400)]
document -O change to Configure

6 years agoMake -O behaviour the default
Ivan Pozdeev [Wed, 12 Aug 2015 17:33:12 +0000 (20:33 +0300)]
Make -O behaviour the default

6 years agopp_sys.c: silence g++ compiler warning
David Mitchell [Tue, 20 Oct 2015 15:29:48 +0000 (16:29 +0100)]
pp_sys.c: silence g++ compiler warning

The warning is harmless but annoying

6 years agoRT: #126309 die more gracefully on (1) x ~1
David Mitchell [Tue, 20 Oct 2015 14:04:49 +0000 (15:04 +0100)]
RT: #126309 die more gracefully on (1) x ~1

Recent improvements to MEXTEND() etc means that the above is now caught and
panics rather than crashing. However, the panic is:

    panic: av_extend_guts() negative count (-9223372036854775681)

which is safe, but not pretty. This commit makes it croak instead with:

    Out of memory during stack extend

Basically Perl_stack_grow() adds an extra 128 bytes of headroom to the
amount it actually extends the stack by. Check in stack_grow() itself
whether this has wrapped, rather than leaving it to av_extend_guts(),
which can only give a generic panic message.

6 years agofix the non-Win32 build breakage introduced in ce9582af
Tony Cook [Wed, 28 Oct 2015 03:11:12 +0000 (14:11 +1100)]
fix the non-Win32 build breakage introduced in ce9582af

On Unix, EU::MM was falling back to EU::MM::version::vpp, which
was removed above.

Make the real available instead.

6 years agoWin32 parallel build fixes C++
Daniel Dragan [Tue, 27 Oct 2015 16:07:51 +0000 (12:07 -0400)]
Win32 parallel build fixes C++

-dmake's parallel scheduler is poor and has problems finding work to run
 leading to idle cores, see note in commit c2c7bda088 about
 generate_uudmap.exe target so compile+link perlglob.exe in 1 process run
-remove whitespace from LIBFILES as much as possible while keeping some
 prettyness in the makefile. This is so the console isn't flooded as much
 with a wall of text as before.
-although perlglob.exe is very small (1 main func, that is it),
 add $(OPTIMIZE), it previously wasnt CC optimized at all
-when -xc++ flag is used (USE_CPLUSPLUS=define), the command options
 file is compiled like C code and syntax errors, use -x to reset file type
 to nothing/auto

g++ -xc++ -I.\include -I. -I.. -DWIN32 -DPERLDLL -DPERL_CORE -s -O2  -DPERL_TEXT
asing -mms-bitfields -o..\generate_uudmap.exe ..\generate_uudmap.c  -s -L"c:\per
l\lib\CORE" -L"C:\MinGW\lib" \
C:\Users\Owner\AppData\Local\Temp\mk10:1:7: error: expected constructor, destruc
tor, or type conversion before '(' token
 INPUT (  -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool  -lcomdlg32 -ladvapi
32 -lshell32 -lole32 -loleaut32 -lnetapi32  -luuid -lws2_32 -lmpr -lwinmm -lvers
ion -lodbc32 -lodbccp32 -lcomctl32 )
dmake:  Error code 129, while making '..\bitcount.h'

-since does not create perl523.lib during link time of
 perl523.dll anymore, to allow parallelism the interface (def file and
 .exp/.lib files) between libperl and XS modules is created before libperl
 and XS modules are every created, this allows the 2 to build in parallel
 and not be dependent on each other. This caused a link failure where an
 XS module wanted a C++ mangled perl data symbol, while the def/lib file
 only had the extern "C", C named data symbol (unless you take
 extraordinary measures, the def/lib file is always extern "C" even if
 the symbol is mangled inside C/C++ lang world and for static linking
 purpose), so make all data symbols EXTERN_C, not extern, in the headers

link -out:..\..\lib\auto\PerlIO\encoding\encoding.dll -dll -nologo -nodefaultlib
 -debug -opt:ref,icf -ltcg              -libpath:"c:\perl\lib\CORE"
-machine:x86 "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Co
ntrols' version='' processorArchitecture='*' publicKeyToken='6595b64144cc
f1df' language='*'" -subsystem:console,"5.01" encoding.obj   "..\..\lib\CORE\per
l523.lib" oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.l
ib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.
lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib
b -def:encoding.def
   Creating library ..\..\lib\auto\PerlIO\encoding\encoding.lib and object ..\..
encoding.obj : error LNK2001: unresolved external symbol "__declspec(dllimport)
struct _PerlIO_funcs const PerlIO_perlio" (__imp_?PerlIO_perlio@@3U_PerlIO_funcs
..\..\lib\auto\PerlIO\encoding\encoding.dll : fatal error LNK1120: 1 unresolved
dmake:  Error code 224, while making '..\..\lib\auto\PerlIO\encoding\encoding.dl
link -dll -out:..\perl523.dll  -nologo -nodefaultlib -debug -opt:ref,icf -ltcg
        -libpath:"c:\perl\lib\CORE"             -machine:x86 "/manifestdependenc
y:type='Win32' name='Microsoft.Windows.Common-Controls' version='' proces
sorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'" -subsystem:c
onsole,"5.01" \
            @Extensions_static \
perl523.exp : error LNK2001: unresolved external symbol _PL_interp_size
perl523.exp : error LNK2001: unresolved external symbol _PL_interp_size_5_18_0
perl523.exp : error LNK2001: unresolved external symbol _PerlIO_pending
perl523.exp : error LNK2001: unresolved external symbol _PerlIO_perlio
..\perl523.dll : fatal error LNK1120: 4 unresolved externals
dmake:  Error code 224, while making '..\perl523.dll'

With this commit, "dmake all" VC C++ build succeeds to the end, G++ build
won't build until 1 other issue is fixed, I fixed that issue for testing
but it is not in this patch, so only that issue remains preventing a G++
build from running to the end.

6 years agodon't distribute version::vpp/EUMM::version::vpp
Daniel Dragan [Sun, 25 Oct 2015 22:53:13 +0000 (18:53 -0400)]
don't distribute version::vpp/EUMM::version::vpp

version::vpp is not part of the public API of version::, the core
cpan/version/lib/ is not capable of using it unlike the on cpan, and the Makefile.PL from cpan version:: that picks
between vpp and vxs isn't in core either. The xsubs behind core
are permanently baked in universal.c, they arent "static XS" or
"dynamic (shared lib) XS", and no XSLoader/DynaLoader is used. is
therefore useless in blead distributed version:: since is only
useful on very old perls. In blead, vpp only existed for the purpose of
making 00impl-pp.t pass, yet takes up space in the perl tarball, and was
installed into the final install location, so remove to save space
since it is unusable. and the rest of version is developed on
cpan, not in core, and is sort of a devel tool and sanity check and
therefore an author test, and core doesn't include author tests like
pod-coverage.t so that is one other reason it is being removed.

Also remove EUMM's, first it isn't miniperl compatible, and it also
is a copy more or less of version::vpp, and blead perl comes with, since it is blead perl and not an old perl. If there is an
accident/error/bad behaviour can get loaded
), but it is an error for it to ever be loaded. Prevent "silent failure"
by deleteing, this way the failure will be an obvious
can't find instead of subtle differences between the XS and
PP version implementations, or the not miniperl compatible failure.
Although could be deleted for
the same reasons as, I am leaving it in for now until the
EUMM patch in "version PP is not PP" goes through review, but still dont
install it, blead comes with the official is 22KB
00impl-pp.t is 0.5KB is 23KB is 5KB

The 3 .pm files were being installed into the final installed perl location
where they are useless on blead perl. Some people complain perl core is
too big/bloated (redhat perl), removing 50KB and 3 files from final
location, and 45.5KB and 3 files from the tarball helps to trim the

6 years agoAlso IRIX seems to have NaN comparison issues.
Jarkko Hietaniemi [Tue, 27 Oct 2015 12:45:28 +0000 (08:45 -0400)]
Also IRIX seems to have NaN comparison issues.

The issues seem to be much harder to trigger (harder than in VC6 or
Tru64, that is), though: the perl #125298 is the only spot where
the problem has surfaced so far.  Though see also perl #126396,
with long doubles (the #125298 is with plain doubles).

All tests pass now in IRIX in blead with default config,
including the t/op/infnan.t.  With -Duselongdouble nothing
new breaks (known issues with locales and M::BI)

6 years agoUpgrade Unicode-Normalize from version 1.21 to 1.23
Steve Hay [Tue, 27 Oct 2015 17:38:55 +0000 (17:38 +0000)]
Upgrade Unicode-Normalize from version 1.21 to 1.23

6 years agoUpgrade Math-BigInt from version 1.999704 to 1.999705
Steve Hay [Tue, 27 Oct 2015 17:37:24 +0000 (17:37 +0000)]
Upgrade Math-BigInt from version 1.999704 to 1.999705

6 years agoReplace two ugly casts in reg_recode() calls.
Jarkko Hietaniemi [Tue, 27 Oct 2015 01:38:09 +0000 (21:38 -0400)]
Replace two ugly casts in reg_recode() calls.

With one ugly cast inside the reg_recode() call.

6 years agodist/ExtUtils-CBuilder/t/02-link.t: Skip on os390
Karl Williamson [Fri, 25 Sep 2015 18:18:33 +0000 (12:18 -0600)]
dist/ExtUtils-CBuilder/t/02-link.t: Skip on os390

This module needs a little work for os390.  But until someone
wants/needs to have it done, we'll simply skip the test.

6 years agoregen podcheck db
Karl Williamson [Mon, 26 Oct 2015 17:38:53 +0000 (11:38 -0600)]
regen podcheck db

Commit 9846bace45546ab19676c8577ccf9218ddd7931d added some overlong
verbatim lines

6 years agoXS-APItest:fetch_pad_names.t: Comments, skip message
Karl Williamson [Sun, 25 Oct 2015 02:06:10 +0000 (20:06 -0600)]
XS-APItest:fetch_pad_names.t: Comments, skip message

6 years agot/re/subst.t: Don't skip a test on EBCDIC
Karl Williamson [Sun, 25 Oct 2015 02:11:47 +0000 (20:11 -0600)]
t/re/subst.t: Don't skip a test on EBCDIC

There is no longer any reason to skip this test.

6 years agore/subst.t: Clarify a test's EBCDIC skip message
Karl Williamson [Sun, 25 Oct 2015 02:11:13 +0000 (20:11 -0600)]
re/subst.t: Clarify a test's EBCDIC skip message

6 years agore/pat_rt_report.t: Clarify EBCDIC skip msg for a test
Karl Williamson [Sun, 25 Oct 2015 02:09:40 +0000 (20:09 -0600)]
re/pat_rt_report.t: Clarify EBCDIC skip msg for a test

6 years agot/op/print.t: Improve EBCDIC skip msg
Karl Williamson [Sun, 25 Oct 2015 02:08:17 +0000 (20:08 -0600)]
t/op/print.t: Improve EBCDIC skip msg

6 years agot/op/chr.t: Improve EBCDIC skip msg
Karl Williamson [Sun, 25 Oct 2015 02:07:51 +0000 (20:07 -0600)]
t/op/chr.t: Improve EBCDIC skip msg

6 years agot/base/lex.t: Generalize for EBCDIC
Karl Williamson [Sun, 25 Oct 2015 02:07:24 +0000 (20:07 -0600)]
t/base/lex.t: Generalize for EBCDIC

6 years ago[perl #126452] partly 0b057af7 revert for C++ builds
Tony Cook [Mon, 26 Oct 2015 04:59:53 +0000 (15:59 +1100)]
[perl #126452] partly 0b057af7 revert for C++ builds

6 years agoXS staticing in ext and dist
Daniel Dragan [Sun, 25 Oct 2015 23:57:11 +0000 (19:57 -0400)]
XS staticing in ext and dist

None of these symbols are exported on Win32 (listed in Makefile.PL with
EUMM's FUNCLIST), so they shouldn't be exported on Linux. Making them
static saves space in the SOs by removing symbol name strings, and removing
runtime plt/got indirection.

6 years agoCarp: prepare for a new CPAN release
Ricardo Signes [Mon, 26 Oct 2015 01:26:37 +0000 (21:26 -0400)]
Carp: prepare for a new CPAN release

6 years agoUpgrade to Thread::Queue 3.07
Jerry D. Hedden [Fri, 23 Oct 2015 23:55:17 +0000 (19:55 -0400)]
Upgrade to Thread::Queue 3.07

Committer: Add additional email address for contributor.

6 years agohv_iternext can return NULL
Jarkko Hietaniemi [Thu, 22 Oct 2015 12:35:10 +0000 (08:35 -0400)]
hv_iternext can return NULL

Coverity #104801

6 years agoAscertain that the fd for fcntl is not negative
Jarkko Hietaniemi [Thu, 22 Oct 2015 11:36:56 +0000 (07:36 -0400)]
Ascertain that the fd for fcntl is not negative

Coverity id #45354

Since maxsysfd is I32 Coverity cannot prove that being larger than
it means that the fd is non-negative.

6 years agoMake FITS_IN_8_BITS() always true under Coverity
Jarkko Hietaniemi [Thu, 22 Oct 2015 11:31:58 +0000 (07:31 -0400)]
Make FITS_IN_8_BITS() always true under Coverity

Similar in spirit to 3e94db23

Coverity id #28938
Coverity id #104778
Coverity id #131329

6 years agoFix the (serial) build with dmake on Windows
Steve Hay [Fri, 23 Oct 2015 07:31:47 +0000 (08:31 +0100)]
Fix the (serial) build with dmake on Windows

The switch to building non-XS modules last in win32/ (introduced
by design as part of the changes to enable parallel building) causes the
build of POSIX to break due to problems with the version module.

This change is the simplest of several workarounds/fixes put forward in
the following threads:

It appears that the version module could benefit from some work to render
this change unnecessary, but for now it's the least invasive way to
restore the dmake build. Thanks to all for chasing this down.

6 years agolib/ExtUtils/t/Embed.t: Fix for z/OS
Karl Williamson [Fri, 25 Sep 2015 18:21:03 +0000 (12:21 -0600)]
lib/ExtUtils/t/Embed.t: Fix for z/OS

6 years agoAdd test for \b{sb}
Karl Williamson [Wed, 21 Oct 2015 17:47:25 +0000 (11:47 -0600)]
Add test for \b{sb}

It turns out that the merge commit
f0bd363c36d925d8d3dfe3b68715763c850b171a makes \b{sb} work much better,
with the main improvement being by commit

We were puzzled as to why it didn't seem to work as advertised, yet
passed all the extensive tests furnished by Unicode.  The answer appears
to be that that those tests mostly test pair-wise things, and the bug
was because results were getting overwritten for longer inputs.
This new test is a simple, but long one.

6 years agot/re/pat_advanced.t: Add comment
Karl Williamson [Wed, 21 Oct 2015 17:34:47 +0000 (11:34 -0600)]
t/re/pat_advanced.t: Add comment

6 years agopp_hot.c: Add comment
Karl Williamson [Wed, 21 Oct 2015 04:22:41 +0000 (22:22 -0600)]
pp_hot.c: Add comment

6 years agoutf8.h: Change formal macro param name to match docs
Karl Williamson [Wed, 21 Oct 2015 04:08:30 +0000 (22:08 -0600)]
utf8.h: Change formal macro param name to match docs

6 years agoPATCH: [perl #126253] Nested quantifiers not caught
Karl Williamson [Thu, 22 Oct 2015 03:30:14 +0000 (21:30 -0600)]
PATCH: [perl #126253] Nested quantifiers not caught

Commit 4fa6dd16d2149c2aeeb32633e3a796d5ebc5b657 added a message
when a quantifier was useless, but then caused the parse to skip it, so
that if it was in an illegal combination, that was no longer caught.

6 years agoPATCH: [perl # 126178] Unterminated /(?i/
Karl Williamson [Wed, 21 Oct 2015 18:45:46 +0000 (12:45 -0600)]
PATCH: [perl # 126178] Unterminated /(?i/

6 years agoUpdate Time-Piece to CPAN version 1.31
Chris 'BinGOs' Williams [Wed, 21 Oct 2015 17:58:58 +0000 (18:58 +0100)]
Update Time-Piece to CPAN version 1.31


1.31    2015-10-20
        - No Changes since 1.30_01

1.30_01 2015-09-01
        - Ignore some tests on non *nix platforms
        - fix compile warnings
        - Inherit from Dynaloader (fix static build issues)
        - Fix windows mem corruption

6 years agoModule-CoreList is 5.20151020 on teh CPAN
Chris 'BinGOs' Williams [Wed, 21 Oct 2015 17:57:07 +0000 (18:57 +0100)]
Module-CoreList is 5.20151020 on teh CPAN

6 years agoCarp: fix test not working on older toolchain
Peter Rabbitson [Wed, 21 Oct 2015 02:02:19 +0000 (22:02 -0400)]
Carp: fix test not working on older toolchain

The newly introduced _dump() utility function is a faithful
representation of what explain() does in newer Test::More versions

6 years agoCarp: fix test incorrectly assuming a recent-enough in @INC
Peter Rabbitson [Wed, 21 Oct 2015 01:58:01 +0000 (21:58 -0400)]
Carp: fix test incorrectly assuming a recent-enough in @INC

6 years agoRe-run two regen/ programs to clear up test failures in t/porting/regen.t
James E Keenan [Wed, 21 Oct 2015 01:44:41 +0000 (21:44 -0400)]
Re-run two regen/ programs to clear up test failures in t/porting/regen.t

./perl -Ilib regen/
./perl -Ilib regen/

6 years agoNote the resource hungriness of mktables.
Jarkko Hietaniemi [Wed, 21 Oct 2015 00:28:25 +0000 (20:28 -0400)]
Note the resource hungriness of mktables.

6 years agomake non-zero exit from Makefile.PL fatal in
Daniel Dragan [Tue, 20 Oct 2015 22:03:45 +0000 (18:03 -0400)]
make non-zero exit from Makefile.PL fatal in

A non-zero exit is fatal according to so do not
continue building even if a Makefile was generated (an END block or code
after WriteMakefile() could have died for example).

This patch is from trying to fix problems in this thread

6 years agoPrepare Module::CoreList for 5.23.5
Steve Hay [Tue, 20 Oct 2015 23:09:32 +0000 (00:09 +0100)]
Prepare Module::CoreList for 5.23.5

6 years agoBump version to 5.23.5
Steve Hay [Tue, 20 Oct 2015 22:53:22 +0000 (23:53 +0100)]
Bump version to 5.23.5

6 years agoCreate perldelta for 5.23.5
Steve Hay [Tue, 20 Oct 2015 22:42:55 +0000 (23:42 +0100)]
Create perldelta for 5.23.5

6 years agoTick off 5.23.4
Steve Hay [Tue, 20 Oct 2015 22:30:33 +0000 (23:30 +0100)]
Tick off 5.23.4