This is a live mirror of the Perl 5 development currently hosted at
6 years agoregcomp.c: Add macro to output diagnostic
Karl Williamson [Mon, 12 Oct 2015 18:29:41 +0000 (12:29 -0600)]
regcomp.c: Add macro to output diagnostic

This is like a similar macro, but takes an extra argument.  It will be
used in the next commit

6 years agoregcomp.c: White-space, comments only
Karl Williamson [Mon, 12 Oct 2015 18:29:14 +0000 (12:29 -0600)]
regcomp.c: White-space, comments only

6 years agoperldiag: Remove no-longer used message.
Karl Williamson [Mon, 12 Oct 2015 18:20:33 +0000 (12:20 -0600)]
perldiag: Remove no-longer used message.

I noticed that this message was there, but hasn't been used for some
time, having been replaced, and I didn't look too hard for when.

6 years agopodcheck.t: Regen db after recent new long verbatim line
Karl Williamson [Mon, 12 Oct 2015 17:42:27 +0000 (11:42 -0600)]
podcheck.t: Regen db after recent new long verbatim line

Commit 6fc2106e6704b632dc6ea04410ea89e1fa4ca43c added a verbatim line
longer than 79 chars.

6 years agoporting/maintainers.t: Skip if -DPERL_EXTERNAL_GLOB
Karl Williamson [Mon, 12 Oct 2015 17:38:35 +0000 (11:38 -0600)]
porting/maintainers.t: Skip if -DPERL_EXTERNAL_GLOB

Maintainers requires the internal File::Glob.

I also reordered the skip if VMS test so the skip tests are all adjacent.

6 years agoFix \p followed by a non-alpha
Karl Williamson [Wed, 7 Oct 2015 22:54:49 +0000 (16:54 -0600)]
Fix \p followed by a non-alpha

See threads beginning at

Prior to this commit, these did not generate the pattern that would be
expected, and displayed apparently irrelevant warnings.  Now this is a
fatal error.

This resolves [perl #126187].  I don't think it's worth a perldelta
entry for this ticket, as the new error message is now in perldelta, and
this never worked properly anyway; it's just now we have a proper error
message.  Patches welcome if you disagree.

6 years agoregcomp.c: Make compile and run-time error msgs identical
Karl Williamson [Wed, 7 Oct 2015 22:42:37 +0000 (16:42 -0600)]
regcomp.c: Make compile and run-time error msgs identical

Prior to this commit, an unknown Unicode property gave different
messages depending on when the problem was found.  Prior to the previous
commit, most were found at run-time, but now most are found at
compile-time.  Therefore use the runtime message everywhere, as it was
the most often encountered before.

6 years agoregcomp.c: Find more errors at compile time
Karl Williamson [Wed, 7 Oct 2015 22:39:07 +0000 (16:39 -0600)]
regcomp.c: Find more errors at compile time

Users can create their own Unicode-like properties, but the names of
those must follow a very restricted syntax.  When compiling a property,
if we can't find it, we have presumed it might be a user-defined one
that will be known at runtime.  But if the name doesn't follow the
restricted syntax, it can't be such, and so must be an error.  Abort now
rather than waiting until run time.

6 years agoUpgrade Unicode::Normalize from version 1.19 to 1.21
Steve Hay [Tue, 13 Oct 2015 13:17:08 +0000 (14:17 +0100)]
Upgrade Unicode::Normalize from version 1.19 to 1.21

6 years agoUpgrade File::Path from version 2.11 to 2.12
Steve Hay [Tue, 13 Oct 2015 13:15:49 +0000 (14:15 +0100)]
Upgrade File::Path from version 2.11 to 2.12

6 years agoUpgrade ExtUtils::CBuilder from version 0.280223 to 0.280224
Steve Hay [Tue, 13 Oct 2015 12:19:10 +0000 (13:19 +0100)]
Upgrade ExtUtils::CBuilder from version 0.280223 to 0.280224

6 years agoUpgrade experimental from version 0.015 to 0.016
Steve Hay [Tue, 13 Oct 2015 12:14:15 +0000 (13:14 +0100)]
Upgrade experimental from version 0.015 to 0.016

6 years ago[perl #126229] POSIX::strerror() clears $!
David Mitchell [Tue, 13 Oct 2015 11:12:37 +0000 (12:12 +0100)]
[perl #126229] POSIX::strerror() clears $!

If POSIX::strerror is passed $! as its arg, then it ends up doing
local $! = $!, which due to a bug in the localisation system, leaves $!
undef even after scope exit.

Work around the bug by assigning $_[0] to a my var first.

6 years agomake /fixed-substr/ much faster.
David Mitchell [Sat, 26 Sep 2015 12:12:40 +0000 (13:12 +0100)]
make /fixed-substr/ much faster.

TL;DR: on platforms with a libc memchr() implementation which makes good
use of underlying hardware support, patterns which include fixed
substrings will now often be much faster; for example with glibc on on a
recent x86_64 CPU, this:

    $s = "a" x 1000 . "wxyz";
    $s =~ /wxyz/ for 1..30000

is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit
ARM Raspberry Pi, there will be a small or little speedup. Conversely,
some pathological cases, such as "ab" x 1000 =~ /aa/ will be slower now;
up to 3 times slower on the rPi, 1.5x slower on x86_64.

In detail:

The perl core includes a Boyer-Moore substring matcher, Perl_fbm_instr(),
which is used to quickly find a fixed substring within a longer string,
where a table of lookups is pre-computed from the substring. As well as
being used in index() when the substring is a constant, its main use
is in patterns. When the regex engine compiles a pattern, it typically
takes note of the two longest fixed substrings within the pattern; for
example in


the two longest are "abc" and "fghij". The engine uses Perl_fbm_instr() to
scan for these two strings before running the full NFA. This often allows
the string to be quickly rejected, or to find a suitable minimum starting
point to run the NFA.

However, Perl_fbm_instr() was written about 16 years ago and has been
virtually untouched since, so it could do with some love.

It currently special-cases strings of length 1 and 2, using roll-your-own
loops along the lines of

    while (s < end) { if (*s++ = c1) ... }

while strings of length 3+ use the Boyer-Moore algorithm. The big
advantage of BM is that in a best-case, where none of the characters from
the substring are found in this region of the string, it only has to test
every N'th char, where N is length of the substring. For example when
searching for wxyz in abcdefghikl..., it just reads and tests d,h,l,..

However these days some platforms have decent memchr() implementations.
For example, glibc has assembly-level implementations for i386, x86_64,
sparc32/64, powerpc32/64, s390-32/64, arm, m68k and ia64 by the looks of
it. These can often be substantially faster than a C-level implementation.

This commit makes Perl_fbm_instr() use memchr() where possible.

For the length == 1 special case, it just calls memchr() directly rather
than using a loop as previously.

For the length == 2 special case, it continues to distinguish the cases
where the two chars of the substring are the same or differ. For the
former it calls memchr() after an initial direct failure, i.e.

    if (*s != c) { s++; s = memchr(....); ... }

For the latter case it does a similar direct test first (to avoid the
costly overhead of a call to memchr() when the next char is the one we
seek anyway), but in addition, on each failure to find the second char
following a found first char, it swaps which char it's searching for.
This means that in something like "aaaaaaa..." =~ /ab/, it wont keep
hopping 1 char position with memchar(s,'a'); after the first hop it
will do memchr(s,'b') and skip lots of chars in one go. This helps reduce
the number of pathological cases.

For the length >= 3 cases (normal BM), it keeps using BM, but after each
iteration where the pointer has been incremented by the skip determined by
the BM algorithm, it now does an additional

    if (*s != c) { s++; s = memchr(....); ... }

step before running the next iteration of BM.

6 years agofbm_instr(): tweak docs and formatting
David Mitchell [Fri, 25 Sep 2015 15:02:53 +0000 (16:02 +0100)]
fbm_instr(): tweak docs and formatting

Expand the commentary at the start of this function; add more blank lines
to separate chunks of code, and document what SVpbm_TAIL is for.

6 years agoPerl_call_sv move EXTEND into branch that needs it
Daniel Dragan [Fri, 25 Sep 2015 20:52:56 +0000 (16:52 -0400)]
Perl_call_sv move EXTEND into branch that needs it

If we aren't manipulating the stack, dont fetch it, check and possibly
extend it. There is a slight chance this EXTEND was covering up missing
EXTENDs somewhere else in Perl core or CPAN C code, if future bisects or
valgrind reports show that this EXTEND by 1 must always be done, this
patch can be reverted. pp_method_named contains a EXTEND/XPUSH* call,
pp_entersub requires 1 arg on stack so, both sides of the
"if (!(flags & G_METHOD_NAMED))" test will in theory make sure there is
1 free slot on the stack on entry to a SUB or XSUB.

See also

6 years agoremove repeated PL_stack_sp derefs in Perl_eval_sv/Perl_call_sv
Daniel Dragan [Fri, 25 Sep 2015 20:38:11 +0000 (16:38 -0400)]
remove repeated PL_stack_sp derefs in Perl_eval_sv/Perl_call_sv

Reduce scope of local SP and remove excessive reads and writes to
PL_stack_sp in Perl_eval_sv/Perl_call_sv. EXTEND macro refetches the
possibly realloced SP on its own, Perl_stack_grow returns the new SP as a
retval and therefore in a register. By using PL_stack_sp instead of
Perl_stack_grow, an extra redundant mem read is done. Also dont keep
SP around for long periods unused, it wastes a C stack slot or non-vol
reg and makes the callframe bigger. The EXTEND could be placed
in the !(flags & G_METHOD_NAMED) branch, but that will be done in another
patch for bisectability.

VC 2003 -O1 machine code sizes of the functions
Perl_eval_sv before 0x28a after 0x286
Perl_call_sv before 0x3cd after 0x3cb

The savings look small since in x86 "*var+=4" and "var+=4" are the same
number of bytes to encode the instruction, only the mod R/M bitfield vals
are different. RISC CPUs benefit more from this patch.

commit c106c2be8b "G_METHOD_NAMED flag for call_method and call_sv"
added skipping the push SV onto stack

The EXTEND and PL_stack_sp direct manipulation code is from
commit a0d0e21ea6 "perl 5.000". The reason is unknown why it did
"SV** sp = stack_sp;" and later "EXTEND(stack_sp, 1);" instead of using
SP, since EXTEND at that time, and to this day requires C auto sp be in

6 years agoperldelta for 0f948285b1d2
Tony Cook [Mon, 12 Oct 2015 04:46:53 +0000 (15:46 +1100)]
perldelta for 0f948285b1d2

6 years agoInclude the name of the non-lvalue sub in error message
Dagfinn Ilmari Mannsåker [Tue, 6 Oct 2015 22:13:31 +0000 (23:13 +0100)]
Include the name of the non-lvalue sub in error message

This makes the cause of the error more obvious if you accidentally call
a non-lvalue sub in the final position of an lvalue one.

6 years ago[perl #126051] make the warnings::enabled example use warnings::enabled
Tony Cook [Mon, 14 Sep 2015 04:32:07 +0000 (14:32 +1000)]
[perl #126051] make the warnings::enabled example use warnings::enabled

7e6d00f88633 added the warnif() function and changed most uses of
warnings:enabled() to use warnif(), including this one.  Revert
just that part.

6 years agosync regen/ and $VERSION
Tony Cook [Mon, 14 Sep 2015 04:31:43 +0000 (14:31 +1000)]
sync regen/ and $VERSION

regen/'s $VERSION was at 1.04 despite it being modified
each time is modified.

So make them use the same version number.

6 years agoadd Win32 USE_NO_REGISTRY build option
Daniel Dragan [Wed, 30 Sep 2015 09:36:51 +0000 (05:36 -0400)]
add Win32 USE_NO_REGISTRY build option

-the first arg of win32_get_privlib is not used if the registry is not
 queried, create a macro to allow the arg to drop out on WIN32_NO_REGISTRY
 builds for efficiency and not to have unused C litteral strings in the
-This patch changes the ABI of
 PerlEnv_lib_path/PerlEnvLibPath/win32_get_privlib between USE_NO_REGISTRY
 and no USE_NO_REGISTRY. Since win32_get_privlib is not exported from
 perl523.dll, assume it and PerlEnv_lib_path are not public API, note
 technically PerlEnv_lib_path will be callable only on PERL_IMPLICIT_SYS
 builds, on no PERL_IMPLICIT_SYS builds it will fail at link time since
 win32_get_privlib isnt exported. Therefore place it in
 non-[affecting]-binary compatibility even though it does affect binary
-delay load advapi32.dll to save startup time (loading the DLL and the DLL
 calling its initializers in DllMain) and one 4 KB memory page for
 advapi32's .data section (doing "perl -E"sleep 100" on WinXP shows
 advapi32 has a 20KB long .data section, first 4 KB are unique to the
 process, the remaining 16KB are COW shared between processes according
 to vmmap tool), putting a DebugBreak() in pp_getlogin and doing a
 "nmake all" shows miniperl never calls getlogin during the build process.
 An nmake test shows only ext/POSIX/t/wrappers.t and lib/warnings.t execute
 pp_getlogin. Keeping advapi32.dll out of the perl process requires
 removing comctl32.dll, since comctrl32.dll loads advapi32.dll, from perl
 which I always do as a custom patch.

filed as [perl #123658]


6 years agostop checking the Win32 registry if *"/Software/Perl" doesn't exist
Daniel Dragan [Wed, 30 Sep 2015 09:28:54 +0000 (05:28 -0400)]
stop checking the Win32 registry if *"/Software/Perl" doesn't exist

This stops each ENV var lookup (and 16 calls to get_regstr, most of which
are %ENV lookups, are done automatically each time a Win32 Perl process
starts) from querying the registry for usually failing lookups.
ActiveState is the only known major user of the Software/Perl reg key.

-cache the root handles, so a typically failing env var lookup does only 1
 system call instead of 3 if the parent key exists
-if the key exists, looking it up is slightly faster since it is 4
 registry syscall instead of previously 6 (open "*\Software\Perl", 2
 RegQueryValueExAs(on "found" behavior each RegQueryValueExA does 2
 RegQueryValueExW  calls), close "*\Software\Perl")
-dont make a system call to lookup a value if the parent key doesn't exist
-change "Software\\Perl" to "SOFTWARE\\Perl" since the reg is case
 preserving but lookups are not case sensitive, this all caps casing is
 what regedit shows, and might save a couple cpu cycles in the DB lookup
 in the kernel
-use RegOpenKeyExW instead of RegOpenKeyEx (actually RegOpenKeyExA), this
 avoids ansi to utf16 conversions at runtime
-dont check HKEY handles for NULL before calling RegCloseKey.
 MS and ReactOS RegCloseKey checks for NULL (zero) handle first thing and
 returns ERROR_INVALID_HANDLE as the retval of RegCloseKey. MS App Verifier
 does not complain about NULL handles.
-Dont check the retval of RegCloseKey, there is no way to dispatch an error
 at this point in the process, there are no interps, and no perlio, and
 maybe no console if its a GUI, and the process is probably exiting anyway.
 Calling Perl_noperl_die (no perl, no perlio, print to stderr) would not
 be friendly to an embedder. A crash box with RaiseException with
-Dont bother to zero the HKEY handles, after a PERL_SYS_TERM until the
 next (if any) PERL_SYS_INIT3, libperl is in an undefined state, it is the
 embedders responsibility to refcount and serialize calls to

See details in [perl #123658]

6 years agoregcomp.c: Fold only use of static function into its caller
Karl Williamson [Wed, 23 Sep 2015 20:12:09 +0000 (14:12 -0600)]
regcomp.c: Fold only use of static function into its caller

regpatws() is only used in one place, and is dangerous to retain it as a
named entity.  This is because wherever white space is to be skipped,
(#...) comments are to be as well, so the function that does both things
should be called instead of this one.

6 years agoregcomp.c: Remove useless code
Karl Williamson [Wed, 23 Sep 2015 20:08:43 +0000 (14:08 -0600)]
regcomp.c: Remove useless code

Just above this code, the parse has moved to beyond /x white space and
comments.  There's no need to try moving again.

6 years agoAllow (#...) anywhere white space is under qr//x
Karl Williamson [Wed, 23 Sep 2015 20:06:23 +0000 (14:06 -0600)]
Allow (#...) anywhere white space is under qr//x

Wherever you can have white space under /x, you can also have a (#...)
comment (even without /x).  Prior to this commit, there were several
places that allowed the white space but not the comments.

This resolves [perl #116639].

6 years agoRestrict white space inside [] inside(?[ ]) to \h
Karl Williamson [Wed, 23 Sep 2015 19:44:31 +0000 (13:44 -0600)]
Restrict white space inside [] inside(?[ ]) to \h

This experimental construct has turned on /x processing for any interior
bracketed character classes, except comments are not allowed.  But,
bracketed character classes have traditionally all been on one line, and
I'm leery of the problems that could arise if we extend them to
multiple.  Therefore, restrict the white space to just spaces and tabs
before this feature becomes non-experimental.  If there is cause, we can
later relax the prohibition.

6 years agoregcomp.c: Simplify some handling
Karl Williamson [Wed, 23 Sep 2015 18:37:01 +0000 (12:37 -0600)]
regcomp.c: Simplify some handling

Prior to this commit the current parse pointer could be off-by-one from
what you might expect.  This keeps it at the beginning of a character
and asserts for that.

6 years agoregcomp.c: Replace apparent dead code by an assert
Karl Williamson [Wed, 23 Sep 2015 17:31:36 +0000 (11:31 -0600)]
regcomp.c: Replace apparent dead code by an assert

In code reading, I concluded that this code path should never happen,
but added an assert() to be sure.

6 years agoregcomp.c: Add some LIKELY(), UNLIKELY().
Karl Williamson [Wed, 23 Sep 2015 17:20:15 +0000 (11:20 -0600)]
regcomp.c: Add some LIKELY(), UNLIKELY().

This is pretty easy to know which branches are likely.

6 years agoregcomp.c: Replace apparent dead code by an assert
Karl Williamson [Wed, 23 Sep 2015 17:19:01 +0000 (11:19 -0600)]
regcomp.c: Replace apparent dead code by an assert

In code reading, I came to the conclusion that this is useless code,
but assert() to be sure.

6 years agoregcomp.c: White-space only
Karl Williamson [Wed, 23 Sep 2015 17:00:04 +0000 (11:00 -0600)]
regcomp.c: White-space only

Outdent some unneeded inner blocks

6 years agoregcomp.c: Simplify some debug handling
Karl Williamson [Wed, 23 Sep 2015 16:45:03 +0000 (10:45 -0600)]
regcomp.c: Simplify some debug handling

This code seems to date from before the variable 'parse_start' was more
global in this routine.  Instead of defining a local variable which
masks the outer one, use the outer one with suitable offset adjustments.

6 years agoIn qr/[(? ... ])/, keep parse pointer at 1st char byte
Karl Williamson [Wed, 23 Sep 2015 20:58:19 +0000 (14:58 -0600)]
In qr/[(? ... ])/, keep parse pointer at 1st char byte

When parsing an extended bracketed character class, pass 1 just blindly
increments the parse pointer by one byte, so that it can point to
interior bytes of a multi-byte character.  In pass 2, it takes more
care.  This works for pass1 as the size this construct always generates
an ANYOF node and so the size is known, and the only reason we are
parsing it is to find the end, and the only characters we care about are
UTF invariants.  But it is not so great practice to be pointing to the
middle of a character, and there may be consequences that I don't
foresee, so keep it pointed to character beginnings.

6 years agoFix some UTF-8 bugs in qr// compiling
Karl Williamson [Mon, 21 Sep 2015 04:49:08 +0000 (22:49 -0600)]
Fix some UTF-8 bugs in qr// compiling

Prior to this commit, nextchar() blindly advanced the parse by one byte,
and then looked to see if that starts a character that should be skipped.
But if the character being parsed is multi-byte, it's going to advance
to an interior byte, which is incorrect.  So change the code so it
advances across the whole current character. not just the first byte.

And several places in the code that wanted to advance the parse from the
current place to the end of any (#...) comments, or white space under
/x, would move the parse pointer back one byte, and call nextchar().
This sort of worked (but took up unnecessary cpu) as long as nextchar()
always advanced by exactly one byte.  But the previous paragraph showed
why this is wrong.  So change those calls to use the new function that
advances from where we are now, created in the previous commit.

I didn't come up with tests that consistently fail, but valgrind on
various .t files in the test suite shows bounds errors fixed by this

6 years agoregcomp.c: Split function into two functions
Karl Williamson [Mon, 21 Sep 2015 03:25:13 +0000 (21:25 -0600)]
regcomp.c: Split function into two functions

Sometimes we want to move to the next non-ignored character in the
input.  The nextchar() function does that (but buggily in UTF-8).

And sometimes we are already at the next character, but if it is one
that should be ignored, we want to move to the first one that isn't.
This commit creates a function to do the second task by extracting the
code in nextchar() to it, and making nextchar() a lightweight wrapper
around it, and hence likely to be optimized out by the compiler.

This is a step in the direction of fixing the UTF-8 problems with
nextchar(), and fixing some other bugs.  The new function has added
generality which won't be used until a later commit.

6 years agoregcomp.c: refactor a static function
Karl Williamson [Sun, 20 Sep 2015 03:13:54 +0000 (21:13 -0600)]
regcomp.c: refactor a static function

nextchar() advances the parse to the next byte beyond any ignorable
bytes, returning the parse pointer before the advancement.

I find this confusing, as

    foo = nextchar();

reads as if foo should point to the next character, instead of the
character where the parse already is at.  This functionality is hard for
a reader to grok, even if the name weren't misleading, as the place the
variable gets set in the source is far away from the call.  It's clearer
to say

    foo = current;

This has confused others as well, as in one place several commits have
been required to get it so it works properly, and games have been played
to back up the parse if it turns out it shouldn't have been advanced,
whereas it's better to check first, then advance if it is the right
thing to do.  Ready-Fire-Aim is not a best practice.

This commit makes nextchar() return void, and changes the few places
where the en-passant value was used.

The new scheme is still buggy, as nextchar() only advances a single
byte, which may be the wrong thing to do when the pattern is UTF-8
encoded.  More work is needed to be in a position to fix this.  We have
only gotten away with this so far because apparently no one is using
non-ASCII white space under /x, and our meta characters are all ASCII,
and there are likely other things that reposition things to a character
boundary before problems have arisen.

6 years agoregcomp.c: Add a panic for code that shouldn't happen
Karl Williamson [Sun, 20 Sep 2015 02:16:46 +0000 (20:16 -0600)]
regcomp.c: Add a panic for code that shouldn't happen

It's better to quit than to blindly continue after failure.

6 years agoregcomp.c: Fixes to comments
Karl Williamson [Fri, 18 Sep 2015 20:32:56 +0000 (14:32 -0600)]
regcomp.c: Fixes to comments

One of these is because the latest vim is not smart enough to know that
a '{' in a comment isn't part of the code for the purposes of the bounce
between start and end brace operation.  This is over a large quantity of
lines, so it is quite helpful for that to work.

6 years Clarify comment
Karl Williamson [Mon, 21 Sep 2015 17:39:57 +0000 (11:39 -0600)] Clarify comment

6 years agoif if is 0.0606 update, but only if if is
Chris 'BinGOs' Williams [Sat, 10 Oct 2015 15:02:18 +0000 (16:02 +0100)]
if if is 0.0606 update, but only if if is

6 years agoFix 683e3b31e8b72cce
H.Merijn Brand [Sat, 10 Oct 2015 13:27:09 +0000 (15:27 +0200)]
Fix 683e3b31e8b72cce

Found when backporting. JHI's reply:


It should be define:define:define.

I was trying to stop the test that uses alarm() not to compiled in a
system where alarm() does not exist.

6 years agobump DynaLoader version to 1.35.
Craig A. Berry [Fri, 9 Oct 2015 15:54:43 +0000 (10:54 -0500)]
bump DynaLoader version to 1.35.

6 years agoMissed one statbuf declaration in 45a23732c73.
Craig A. Berry [Fri, 9 Oct 2015 15:29:44 +0000 (10:29 -0500)]
Missed one statbuf declaration in 45a23732c73.

The VMS-specific corner of the ifdef jungle ended up using
statbuf without declaring it, so add a declaration.

6 years agoConstant data in .c, not in a .h
Jarkko Hietaniemi [Thu, 8 Oct 2015 23:16:22 +0000 (19:16 -0400)]
Constant data in .c, not in a .h

clang says:
./sdbm.h:54:20: warning: 'extern' variable has an initializer [-Wextern-initializer]

6 years agoDynaLoader.doc was deleted 20 years ago in 3b35bae3
Jarkko Hietaniemi [Thu, 8 Oct 2015 23:09:00 +0000 (19:09 -0400)]
DynaLoader.doc was deleted 20 years ago in 3b35bae3

6 years agoTrailing comma is non-standard.
Jarkko Hietaniemi [Wed, 7 Oct 2015 11:13:01 +0000 (07:13 -0400)]
Trailing comma is non-standard.

(Found by cadvise, would have been found by gcc -pedantic.)

6 years agoSince NUM_ANYOF_CODE_POINTS is 256, this_end is always < 256.
Jarkko Hietaniemi [Wed, 26 Aug 2015 02:45:57 +0000 (22:45 -0400)]
Since NUM_ANYOF_CODE_POINTS is 256, this_end is always < 256.

(And the %04X will not happen.)

(regcomp.h says that in theory NUM_ANYOF_CODE_POINTS can be more than 256.)

Coverity CID 104774

6 years agot/op/pack.t: Fix some skipped tests on EBCDIC
Karl Williamson [Tue, 6 Oct 2015 16:23:34 +0000 (10:23 -0600)]
t/op/pack.t: Fix some skipped tests on EBCDIC

These tests were skipped on EBCDIC platforms because they failed there.
It turned out that the tests were ASCII-centric, and just had to be
modified slightly to pass.

6 years agot/op/pack.t: Clarify comment; change variable name
Karl Williamson [Tue, 6 Oct 2015 16:22:10 +0000 (10:22 -0600)]
t/op/pack.t: Clarify comment; change variable name

The variable is really the bytes that compose the utf8, not the utf8.
Make the name clearer.

6 years agopartial PL_statbuf removal
Daniel Dragan [Fri, 14 Aug 2015 22:34:09 +0000 (18:34 -0400)]
partial PL_statbuf removal

Perl_nextargv has to have access to the Stat_t that is written to inside
S_openn_cleanup or else run/switches.t, io/argv.t, io/inplace.t, and
io/iprefix.t will fail. Removing the uses of PL_statbuf that are using
PL_statbuf due to historical reason, and not using PL_statbuf to pass data
between different funcs/different callstacks. This patch makes it easier to
remove PL_statbuf in the future since the number uses of it has been

-in Perl_apply move SETERRNO before tot--; so the branch can be combined
 with other "tot--;" branches by CC optmizer
-combine 2 Perl_croak(aTHX_ "Illegal suidscript"); statements in
 S_validate_suid to make code look simpler, drop my_perl arg for space
 efficiency on threads of rarely executed code

6 years agoProperly duplicate PerlIO::encoding objects
Vincent Pit [Fri, 28 Aug 2015 17:17:00 +0000 (14:17 -0300)]
Properly duplicate PerlIO::encoding objects

PerlIO::encoding objects are usually initialized by calling Perl methods,
essentially from the pushed() and getarg() callbacks. During cloning, the
PerlIO API will by default call these methods to initialize the duplicate
struct when the PerlIOBase parent struct is itself duplicated. This does
not behave so well because the perl interpreter is not ready to call
methods at this point, for the stacks are not set up yet.

The proper way to duplicate the PerlIO::encoding object is to call sv_dup()
on its members from the dup() PerlIO callback. So the only catch is to make
the getarg() and pushed() calls implied by the duplication of the underlying
PerlIOBase object aware that they are called during cloning, and make them
wait that the control flow returns to the dup() callback. Fortunately,
getarg() knows since its param argument is then non-null, and its return
value is passed immediately to pushed(), so it is enough to tag this
returned value with a custom magic so that pushed() can see it is being
called during cloning.

This fixes [RT #31923].

6 years agomake sv_backoff tailcall friendly
Daniel Dragan [Fri, 25 Sep 2015 04:40:43 +0000 (00:40 -0400)]
make sv_backoff tailcall friendly

Reorder the body of Perl_sv_backoff slightly to make it more tail-call
friendly, and change its signature from returning an int (always 0) to

sv_backoff has only 1.5 function calls in it, there is a memcpy of a U32 *
for alignment reasons (I wont discuss U32_ALIGNMENT_REQUIRED) inside of
SvOOK_offset, and the explicit Move()/memmove. GCC and clang often inline
memcpy/memmove when the length is a constant and is small. Sometimes
a CC might also do unaligned memory reads if OS/CPU allows it
so I'll assume memcpy by short constant isn't a func call for discussion.
By moving SvFLAGS modification before the one and only func call, and
changing the return type to void, there is no code to execute after the
Move func call so the CC, if it wants (OS/ABI/CPU, specifically I am
thinking about x86-64) can tailcall jump to memmove. Also var sv can be
stored in a cheaper vol reg since it is not saved around any func calls
(SvFLAGS set was moved) assuming the memcpy by short constant was inlined.

The before machine code size of Perl_sv_backoff with VC 2003 -O1 was
0x6d bytes. After size is 0x61. .text section size of perl523.dll was
after was 0xD2733 bytes long, before was 0xD2743 bytes long. VC perl does
not inline memcpys by default.

In commit a0d0e21ea6 "perl 5.000" the return 0 was added. The int ret type
is from day 1 of sv_backoff function existing/day 1 of SV *s
from commit 79072805bf "perl 5.0 alpha 2". str_backoff didn't exist AFAIK,
only str_grow would retake the memory at the start of the block. Since
sv_backoff is usually used in a "&& func()" macro (SvOOK_off), it needed a
non void ret type, a simple ", 0" in the macro fixes that. All CCs optimize
and remove "if(0)" machine instructions so the ", 0" is optimized away in
the perl binary.

6 years agoperlgit.pod: how to unescape 'git am' From lines
David Mitchell [Thu, 8 Oct 2015 15:07:06 +0000 (16:07 +0100)]
perlgit.pod: how to unescape 'git am' From lines

Due to Reasons, some UNIX mail systems escape any leading 'From ' lines
with a '>'. Explain how to un-escape them.

6 years agoUpdate Encode to CPAN version 2.78
Chris 'BinGOs' Williams [Wed, 7 Oct 2015 15:31:48 +0000 (16:31 +0100)]
Update Encode to CPAN version 2.78


$Revision: 2.78 $ $Date: 2015/09/24 02:19:21 $
! Makefile.PL
  Mend pull/42 again.  This time correctly.
! lib/Encode/Supported.pod
  Applied: RT#107146: [PATCH] fix a spelling mistake

6 years agoperlsub.pod: note that anonymous subs can have signatures, too
Ricardo Signes [Tue, 6 Oct 2015 19:42:05 +0000 (15:42 -0400)]
perlsub.pod: note that anonymous subs can have signatures, too

6 years agoutf8.c: Slight code simplification
Karl Williamson [Sat, 3 Oct 2015 20:07:43 +0000 (14:07 -0600)]
utf8.c: Slight code simplification

The changed code computes the code point to output in a warning.
However, the function it calls will output essentially the same warning
if called with the proper flag.  So, just do that.  The slight change in
the output is that the calling function adds the operation name, like
"in print" to the end of the message, so this changes causes a better
message to be output.  I did not change the handling of surrogates here,
because the warning messages are too different.

6 years agoutf8.c: Fix comment
Karl Williamson [Fri, 25 Sep 2015 04:36:41 +0000 (22:36 -0600)]
utf8.c: Fix comment

6 years agoFix ext/File-Glob/t/rt114984.t for -DPERL_EXTERNAL_GLOB
Karl Williamson [Mon, 5 Oct 2015 22:54:24 +0000 (16:54 -0600)]
Fix ext/File-Glob/t/rt114984.t for -DPERL_EXTERNAL_GLOB


This commit changes a \n to a space so that when passed to a shell, it
doesn't think the 2nd line is a new sh command.

6 years agoperlapi: Note another exception to given rule
Karl Williamson [Mon, 5 Oct 2015 22:45:39 +0000 (16:45 -0600)]
perlapi: Note another exception to given rule

PERL_EXTERNAL_GLOB being defined also results in the described behavior.

6 years agoUpdate IO-Compress to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 13:00:22 +0000 (14:00 +0100)]
Update IO-Compress to CPAN version 2.069


  2.069 26 Sept 2015

      * IO::Compress::FAQ
        - Added a section of bgzip
          RT #103295: IO::Compress Feature request

      * IO::Compress::Zip
        - Zip64 needs to be first in extra field to workaround a Windows Explorer Bug
          See for details

6 years agoUpdate Compress-Raw-Zlib to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 12:58:58 +0000 (13:58 +0100)]
Update Compress-Raw-Zlib to CPAN version 2.069


  2.069 26 Sept 2015

      * reduce compiler warnings and stderr noise

      * amigaos4: cpan/Compress-Raw-Zlib: also __amigaos4__

      * const all global data

      * Coverity finding: Unused value

      * Coverity findings

      * Coverity finding: Overlapping buffer in memory copy

6 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 12:56:23 +0000 (13:56 +0100)]
Update Compress-Raw-Bzip2 to CPAN version 2.069


  2.069 26 Sept 2015

      * reduce compiler warnings and stderr noise

      * consting misc tables

6 years agoCleanup, document, and restructure regen/
Yves Orton [Mon, 5 Oct 2015 16:49:46 +0000 (18:49 +0200)]
Cleanup, document, and restructure regen/

We cleanup the parsing code, replacing our set of arrays of
properties with an array of hashes of properties, with
utility subs registering new items, etc.

We also split up the output code into a set of subs,
one sub per output "blob" (generaly a var definition),
so that we have some visibility of the higher level strucuture
of our output code. With this patch visibility of the structure
of what we generate emerges from the nest of here docs. :-)

Note this change does not (greatly) alter regcomp.sym or
perldebguts.pod, it merely cleans up and generally speaking
modernizes and most importantly documents the code.

6 years agofix perl #126186 make all verbs allow an optional arg
Yves Orton [Sun, 4 Oct 2015 22:03:10 +0000 (00:03 +0200)]
fix perl #126186 make all verbs allow an optional arg

In perl #126186 it was pointed out we had started allowing name
arguments for verbs where we did not document them to be supported,
albeit in an inconsistent way. The previous patch cleaned up some
of the cause of this, but it seems better to just generally allow
the existing verbs to all support a mark name argument.

So this patch reverses the effect of the previous patch, and makes
all verbs, FAIL, ACCEPT, etc, allow an optional argument, and
set REGERROR/REGMARK appropriately as well.

6 years agofix perl #126186 - (*ACCEPT) does not allow arguments
Yves Orton [Sun, 4 Oct 2015 14:22:17 +0000 (16:22 +0200)]
fix perl #126186 - (*ACCEPT) does not allow arguments

6 years agoadd some tests for perl #126186
Yves Orton [Sun, 4 Oct 2015 13:45:05 +0000 (15:45 +0200)]
add some tests for perl #126186

6 years agoFuture-proof pp_trans against a possible future undefined behaviour
Vincent Pit [Thu, 1 Oct 2015 15:28:51 +0000 (12:28 -0300)]
Future-proof pp_trans against a possible future undefined behaviour

If do_trans() ever wants to modify the stack in the future, this would
cause an undefined behaviour as mPUSHi() invokes its parameter on the same
argument list as PUSHmortal, which itself touches the stack.

6 years agoadd changelog for
Ricardo Signes [Sun, 4 Oct 2015 22:48:21 +0000 (18:48 -0400)]
add changelog for

6 years agofix perl-126222 - (?!) OPFAIL optimization does work in (?(?!)yes|no)
Yves Orton [Sun, 4 Oct 2015 12:13:44 +0000 (14:13 +0200)]
fix perl-126222 - (?!) OPFAIL optimization does work in (?(?!)yes|no)

OPFAIL should trigger the no branch when used in this context

Thanks to Victor Adam for the report.

6 years agoAdd a todo test for perl-126222
Yves Orton [Sun, 4 Oct 2015 12:04:51 +0000 (14:04 +0200)]
Add a todo test for perl-126222

6 years agoregcomp.c: make an expression more legible
Yves Orton [Sun, 4 Oct 2015 11:21:25 +0000 (13:21 +0200)]
regcomp.c: make an expression more legible

6 years agoUpdate Devel-PPPort to CPAN version 3.32
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:58:57 +0000 (18:58 +0100)]
Update Devel-PPPort to CPAN version 3.32


3.32 - 2015-09-30

    * Lexical topic no longer works as of perl 5.23

6 years agoUpdate Perl-OSType to CPAN version 1.009
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:56:56 +0000 (18:56 +0100)]
Update Perl-OSType to CPAN version 1.009


1.009     2015-09-21 10:09:35-04:00 America/New_York


    - Added 'sco' as a Unix-type OS

6 years agoUpdate experimental to CPAN version 0.015
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:56:02 +0000 (18:56 +0100)]
Update experimental to CPAN version 0.015


0.015     2015-10-03 14:21:18+02:00 Europe/Amsterdam
          Make lexical_topic a deprecated feature

6 years agoResort MANIFEST for 95318fb6
Jarkko Hietaniemi [Fri, 2 Oct 2015 23:15:33 +0000 (19:15 -0400)]
Resort MANIFEST for 95318fb6

(somehow in smokes and Jenkins the porting/manifest.t passed?)

6 years ago[MERGE] branch symbol-cleanup
Jarkko Hietaniemi [Fri, 2 Oct 2015 22:35:58 +0000 (18:35 -0400)]
[MERGE] branch symbol-cleanup

Cleanup unused Configure symbols.
- d_modfl_pow32_bug
- filesystem stat
- sendmsg/recvmsg


Add a script for doing this kind of symbol cross-referencing.

There are plenty of remaining unused symbols, but these were
just some of the easy ones.

6 years agoUse <sys/poll.h> if available before going select().
Jarkko Hietaniemi [Mon, 17 Aug 2015 00:15:11 +0000 (20:15 -0400)]
Use <sys/poll.h> if available before going select().

Some BSD implementations might have <sys/poll.h> instead of <poll.h>.

Noticed while looking for unused symbols.

6 years agouconfig.h regen
Jarkko Hietaniemi [Thu, 1 Oct 2015 22:59:18 +0000 (18:59 -0400)]
uconfig.h regen

6 years agoRemove unused BSD sendmsg/recvmg symbols.
Jarkko Hietaniemi [Mon, 17 Aug 2015 00:24:17 +0000 (20:24 -0400)]
Remove unused BSD sendmsg/recvmg symbols.

Unused in CPAN, too.  There are uses of these symbols,
but under the Socket:: namespace.

6 years agoRemove unused d_modfl_pow32_bug symbol.
Jarkko Hietaniemi [Sun, 16 Aug 2015 20:02:59 +0000 (16:02 -0400)]
Remove unused d_modfl_pow32_bug symbol.

Even if the bug might still be present in ancient versions of glibc,
there's no code in the current Perl core using that.

6 years agoRemove unused filesystem stat symbols.
Jarkko Hietaniemi [Sat, 15 Aug 2015 16:54:08 +0000 (12:54 -0400)]
Remove unused filesystem stat symbols.

d_fs_data_s HAS_STRUCT_FS_DATA
d_fstatfs HAS_FSTATFS
d_fstatvfs HAS_FSTATVFS
d_getfsstat HAS_GETFSSTAT
d_getmnt HAS_GETMNT
d_getmntent HAS_GETMNTENT
d_hasmntopt HAS_HASMNTOPT
d_statfs_f_flags HAS_STRUCT_STATFS_F_FLAGS
d_ustat HAS_USTAT
i_mntent I_MNTENT
i_sysmount I_SYS_MOUNT
i_sysstatfs I_SYS_STATFS
i_sysstatvfs I_SYS_STATVFS
i_sysvfs I_SYS_VFS
i_ustat I_USTAT

Unused by the Perl core.

As far as I can remember I added these scans long ago, for some
purpose (df(1) kind of APIs?) but whatever it was, it obviously
hasn't exactly caught fire in the last 15 years.

Some rare uses of these APIs (not these defines, but e.g. statfs)
in CPAN (like the Quota module), but those seem to do their own

6 years agoScript for checking config symbol use.
Jarkko Hietaniemi [Sat, 15 Aug 2015 15:24:58 +0000 (11:24 -0400)]
Script for checking config symbol use.

6 years agoremove documentation for the now-removed lexical topic
Ricardo Signes [Fri, 2 Oct 2015 16:16:40 +0000 (12:16 -0400)]
remove documentation for the now-removed lexical topic

6 years agogiven(): remove support for lexical $_
David Mitchell [Fri, 2 Oct 2015 16:19:22 +0000 (17:19 +0100)]
given(): remove support for lexical $_

There is dead code that used to allow

    my $_;
    given ($foo) {
        # lexical $_ aliased to $foo here

Now that lexical $_ has been removed, remove the code.  I've left the
signatures of the newFOO() functions unchanged; they just expect a target
of 0 to always be passed now.

6 years agoadd removal of lexical topic to perldelta
Ricardo Signes [Fri, 2 Oct 2015 15:42:18 +0000 (11:42 -0400)]
add removal of lexical topic to perldelta

6 years ago[MERGE] EXTEND(), XSRETURN() wrap issues
David Mitchell [Fri, 2 Oct 2015 10:43:41 +0000 (11:43 +0100)]
[MERGE] EXTEND(), XSRETURN() wrap issues

6 years agoadd tests for XSRETURN* macros
Doug Bell [Wed, 3 Jun 2015 03:39:09 +0000 (22:39 -0500)]
add tests for XSRETURN* macros

6 years agoadd assertion to prevent stack corruption in XSUB
Doug Bell [Wed, 3 Jun 2015 03:34:42 +0000 (22:34 -0500)]
add assertion to prevent stack corruption in XSUB

We should not be able to return negative offsets from the stack in

6 years agofix up EXTEND() callers
David Mitchell [Mon, 21 Sep 2015 13:49:22 +0000 (14:49 +0100)]
fix up EXTEND() callers

The previous commit made it clear that the N argument to EXTEND()
is supposed to be signed, in particular SSize_t, and now typically
triggers compiler warnings where this isn't the case.

This commit fixes the various places in core that passed the wrong sort of
N to EXTEND(). The fixes are in three broad categories.

First, where sensible, I've changed the relevant var to be SSize_t.

Second, where its expected that N could never be large enough to wrap,
I've just added an assert and a cast.

Finally, I've added extra code to detect whether the cast could
wrap/truncate, and if so set N to -1, which will trigger a panic in

This also fixes
    [perl #125937] 'x' operator on list causes segfault with possible
    stack corruption

6 years agomake EXTEND() and stack_grow() safe(r)
David Mitchell [Mon, 7 Sep 2015 14:00:32 +0000 (15:00 +0100)]
make EXTEND() and stack_grow() safe(r)

This commit fixes various issues around stack_grow() and its
two main wrappers, EXTEND() and MEXTEND(). In particular it behaves
very badly on systems with 32-bit pointers but 64-bit ints.

One noticeable effect of this is commit is that various usages of EXTEND()
etc will now start to give compiler warnings - usually because they're
passing an unsigned N arg when it should be signed. This may indicate
a logic error in the caller's code which needs fixing. This commit causes
several such warnings to appear in core code, which will be fixed in the
next commit.

Essentially there are several potential false negatives in this basic

     if (PL_stack_max - p < (SSize_t)(n))

where it incorrectly skips the call to stack_grow() and then the caller
tramples over the end of the stack because it assumes that it has in fact
been extended. The value of N passed to stack_grow() can also potentially
get truncated or wrapped.

Note that the N arg of stack_grow() is SSize_t and EXTEND()'s N arg is
documented as SSize_t.  In earlier times, they were both ints.
Significantly, this means that they are both signed, and always have been.

In detail, the problems and their solutions are:

1) N is a signed value: if negative, it could be an indication of a
    caller's invalid logic or wrapping in the caller's code. This should
    trigger a panic. Make it so by adding an extra test to EXTEND() to
    always call stack_grow if negative, then add a check and panic in
    stack_grow() (and other places too). This extra test will be constant
    folded when EXTEND() is called with a literal N.

2) If the caller passes an unsigned value of N, then the comparison is
    between a signed and an unsigned value, leading to potential
    wrap-around. Casting N to SSize_t merely hides any compiler warnings,
    thus failing to alert the caller to a problem with their code. In
    addition, where sizeof(N) > sizeof(SSize_t), the cast may truncate N,
    again leading to false negatives. The solution is to remove the cast,
    and let the caller deal with any compiler warnings that result.

3) Similarly, casting stack_grow()'s N arg can hide any warnings issued by
    e.g. -Wconversion. So remove it.  It still does the wrong thing if the
    caller uses a non-signed type (usually a panic in stack_grow()), but
    coders have slightly more chance of spotting issues at compile time

4) If sizeof(N) > sizeof(SSize_t), then the N arg to stack_grow() may get
   truncated or sign-swapped. Add a test for this (basically that N is too
   big to fit in a SSize_t); for simplicity, in this case just set N to
   -1 so that stack_grow() panics shortly afterwards. In platforms where
   this can't happen, the test is constant folded away.

With all these changes, the macro now looks in essence like:

     if ( n < 0 || PL_stack_max - p < n)
            (sizeof(n) > sizeof(SSize_t) && ((SSize_t)(n) != n) ? -1 : n));

6 years agofix some 32/64-bit compiler warnings
David Mitchell [Wed, 9 Sep 2015 12:02:40 +0000 (13:02 +0100)]
fix some 32/64-bit compiler warnings

Some bits of code don't do well on a 32-bit system with 64-bit ints

In particular:

    if sizeof(MEM_SIZE) > sizeof(n), then the shift count could be

    ln and n were two different sizes and signesses, so comparing them
    warned. Since they were being mis-used as two convenient temporary
    booleans anyway, just use temporary booleans instead.

    the test/assertion (IV)elen < 0 was (I think) being used to test for
    signed/unsigned conversion wrap-around. elen is of type STRLEN which
    is a pointer-based type, so can be 32-bit while IV is 64-bit. Instead
    compare it to half the maximum value of a STRLEN var to see if it may
    have wrapped.

6 years agoUpgrade Module-Metadata from 1.000027 to 1.000029-TRIAL
Karen Etheridge [Thu, 1 Oct 2015 04:30:20 +0000 (21:30 -0700)]
Upgrade Module-Metadata from 1.000027 to 1.000029-TRIAL

1.000029  2015-09-11 16:25:43Z (TRIAL RELEASE)
  - fix missing "use" statement in refactored test helper (only affected older
    perls, due to other module interactions)

1.000028  2015-09-11 04:24:39Z (TRIAL RELEASE)
  - refactored and expanded test cases
  - fixed a $VERSION extraction issue on perl 5.6.2 (RT#105978, PR#17)
  - fix the detection of package Foo when $Foo::VERSION is set (RT#85961)


distribution files omitted:

6 years agoadd licensing information to pod
Karen Etheridge [Thu, 1 Oct 2015 01:44:35 +0000 (18:44 -0700)]
add licensing information to pod

6 years agoperlapi: Clarify process of using undocumented globals
Karl Williamson [Wed, 18 Jun 2014 00:49:53 +0000 (18:49 -0600)]
perlapi: Clarify process of using undocumented globals

One should send email to p5p first to get the go-ahead for documenting
and using an undocumented function or global variable.

6 years agoAdd a test for a goto regression from Aug 2010 fixed in Oct 2014.
Nicholas Clark [Wed, 30 Sep 2015 15:31:26 +0000 (17:31 +0200)]
Add a test for a goto regression from Aug 2010 fixed in Oct 2014.

An obscure bug involving goto within the same scope in the presence of
compile-time optimised away blocks was introduced in Aug 2010 by commit
ac56e7de46621c6f, "Peephole optimise adjacent pairs of nextstate ops."

The bug was fixed in Oct 2014 by commit f5b5c2a37af87535, "Simplify
double-nextstate optimisation"

Add a test, to ensure that we don't regress.

6 years agodocument the specific value of $!{E...}
Ricardo Signes [Wed, 30 Sep 2015 11:49:40 +0000 (07:49 -0400)]
document the specific value of $!{E...}

...and note that it is subject to change and not guaranteed

6 years agoperlfunc: Nit
Karl Williamson [Tue, 29 Sep 2015 17:55:02 +0000 (11:55 -0600)]
perlfunc: Nit

6 years agoMerge branch 'remove-lexical-topic' into blead
Ricardo Signes [Tue, 29 Sep 2015 15:16:52 +0000 (11:16 -0400)]
Merge branch 'remove-lexical-topic' into blead

6 years agoMatch ops no longer need OPpTARGET_MY origin/rjbs/remove-lexical-topic
Father Chrysostomos [Wed, 19 Aug 2015 21:39:15 +0000 (14:39 -0700)]
Match ops no longer need OPpTARGET_MY

Actually, I don’t think they have needed it for a while.