This is a live mirror of the Perl 5 development currently hosted at
3 years agoperlguts: sprintf %p now works
Karl Williamson [Sat, 16 Nov 2019 16:09:49 +0000 (09:09 -0700)]
perlguts: sprintf %p now works

So recommend it instead of saying don't use it.

3 years agoSet CCHOME to make op/taint.t pass
Max Maischein [Sun, 17 Nov 2019 22:22:24 +0000 (23:22 +0100)]
Set CCHOME to make op/taint.t pass

Thanks to TonyC for providing the missing piece

3 years agoAdd smoke support for OSX
Max Maischein [Sun, 17 Nov 2019 19:48:48 +0000 (20:48 +0100)]
Add smoke support for OSX

3 years agoGithub Actions only get 2 CPUs
Max Maischein [Sun, 17 Nov 2019 19:39:16 +0000 (20:39 +0100)]
Github Actions only get 2 CPUs

We could maybe use 3 for testing, but that's a later optimization

3 years agoMSVC100FREE -> MSVC100
Max Maischein [Sun, 17 Nov 2019 18:52:18 +0000 (19:52 +0100)]

3 years agoSkip the TTY tests since we don't have a TTY
Max Maischein [Sun, 17 Nov 2019 08:00:03 +0000 (09:00 +0100)]
Skip the TTY tests since we don't have a TTY

This should fix the op/stat failure

3 years agoUse Cygwin native git to fix file permissions
Max Maischein [Sun, 17 Nov 2019 07:59:32 +0000 (08:59 +0100)]
Use Cygwin native git to fix file permissions

This should fix the porting/ related test failures

3 years agoMemoize: rewrite expmod_t.t
David Mitchell [Mon, 18 Nov 2019 13:29:20 +0000 (13:29 +0000)]
Memoize: rewrite expmod_t.t

This test script checks that cache entries expire correctly. However, it
occasionally causes smoke failures, since it's sensitive to timing and
so very slow machines may trip it up.

This commit rewrites the test script so that (hopefully) it will be
immune to timing issues.

It just repeatedly calls the memoized function, each time recording the
time just before and after, which gives a bracketed time range within
which we know the function was called. Then the previous range and the
current range can be analysed to determine whether a new or cached value
was returned, and in either case whether this was within or beyond any possible
expiry time.

Note that I removed the use Time::HiRes, as there seems to be a bug with
Memoize::Expire whereby the returned cached value gets stringified,
which can cause rounding errors if the original value was an NV.
Sticking with integers makes life easier.

3 years agoperlguts: Remove stray POD characters
Dagfinn Ilmari Mannsåker [Mon, 18 Nov 2019 10:41:30 +0000 (10:41 +0000)]
perlguts: Remove stray POD characters

- double qoutes inside C<> (not used elsewhere in this doc)
- trailing ctrl-backslash

3 years agoperldelta for v5.31.5-346-g116e19abbf
David Mitchell [Mon, 18 Nov 2019 10:41:05 +0000 (10:41 +0000)]
perldelta for v5.31.5-346-g116e19abbf

Document the sighandler changes.

3 years ago[MERGE] fixup perl's OS signal handling
David Mitchell [Mon, 18 Nov 2019 10:20:54 +0000 (10:20 +0000)]
[MERGE] fixup perl's OS signal handling

First some background:

UNIXy OSes support two types of signal handler function:

    Signal_t handler1(int sig);
    Signal_t handler3(int sig, siginfo_t *info, void *uap);

The original one-argument handler was set using the signal(2) system
call. The newer sigaction(2) system call allows either a 1-arg or
3-arg handler to be specified:

    act.sa_handler = handler1;
    sigaction(sig, act, NULL);

    act.sa_sigaction = handler3;
    act.sa_sa_flags |= SA_SIGINFO;
    sigaction(sig, act, NULL);

The current behaviour in perl core is that, in the presence of
HAS_SIGACTION and SA_SIGINFO, the signal handler type and function are
both declared as 3-arg, but perl still tells the kernel that the
supplied signal handler function takes one arg. This means that whenever
the kernel calls the handler, args 2 and 3 are whatever garbage the OS
and architecture cause them to happen to be.

Note that POSIX.xs *does* allow a 3-arg signal handler to be specified
by passing the SA_SIGINFO flag, and a couple of tests check for this.

Recently, gcc-8 has (quite reasonably) been warning that we're passing
around 3-arg function pointers where a 1-arg function pointer is

This branch fixes things up by declaring the signal handler type as
1-arg to match reality. It also introduces a new type, Siginfo_t, which
is a wrapper for those platforms which have siginfo_t, and a dummy
implementation for those which don't.

In addition it adds new explicit handler functions with a known
number of args, e.g. Perl_sighandler1() and Perl_sighandler3(), which
can be used by POSIX.xs when it wants to use a specific handler type.

It also adds a new function, Perl_perly_sighandler(), which is called by
the underlying OS signal handler to do the actual perl-level call to
$SIG{FOO}, and which has an extra arg to indicate whether it is being
called via a safe signal path or not.

3 years agoPerl_csighandler(): remove forward declaration
David Mitchell [Tue, 12 Nov 2019 11:36:38 +0000 (11:36 +0000)]
Perl_csighandler(): remove forward declaration

There's a forward declaration of this function in mg.c. This should be
redundant in these days of embed.fnc and embed.h, so remove it.

3 years agoPerl_perly_sighandler: re-indent some code
David Mitchell [Tue, 12 Nov 2019 11:32:06 +0000 (11:32 +0000)]
Perl_perly_sighandler: re-indent some code

Fix indentation after previous commits modified scopes; also indent
some nested #if's correctly.

Whitespace-only change

3 years agoPerl_perly_sighandler: combine two conditions
David Mitchell [Tue, 12 Nov 2019 11:28:21 +0000 (11:28 +0000)]
Perl_perly_sighandler: combine two conditions

The branch is only taken if a number of conditions are true. Combine
them into a single if statement, with the sip test first, so that an
unnecessary call to sigaction() may be skipped if its only going to
immediately fail afterwards because sip isn't true.

Shouldn't be any change in functionality.

3 years agoremove some redundant sig handler type casts
David Mitchell [Tue, 12 Nov 2019 11:19:15 +0000 (11:19 +0000)]
remove some redundant sig handler type casts

3 years agodeclare perl core's sig handler as 1-arg
David Mitchell [Tue, 12 Nov 2019 10:47:30 +0000 (10:47 +0000)]
declare perl core's sig handler as 1-arg

First some background:

UNIXy OSes support two types of signal handler function:

    Signal_t handler1(int sig);
    Signal_t handler3(int sig, siginfo_t *info, void *uap);

The original one-argument handler was set using the signal(2) system
call. The newer sigaction(2) system call allows either a 1-arg or
3-arg handler to be specified:

    act.sa_handler = handler1;
    sigaction(sig, act, NULL);

    act.sa_sigaction = handler3;
    act.sa_sa_flags |= SA_SIGINFO;
    sigaction(sig, act, NULL);

The current behaviour in perl core is that, in the presence of
HAS_SIGACTION and SA_SIGINFO, the signal handler type and function are
both declared as 3-arg, but perl still tells the kernel that the
supplied signal handler function takes one arg. This means that whenever
the kernel calls the handler, args 2 and 3 are whatever garbage the OS
and architecture cause them to happen to be.

Note that POSIX.xs *does* allow a 3-arg signal handler to be specified
by passing the SA_SIGINFO flag, and a couple of tests check for this.

Recently, gcc-8 has (quite reasonably) been warning that we're passing
around 3-arg function pointers where a 1-arg function pointer is

After the groundwork laid down by the previous commits in this branch,
this commit flips things over so that the perl core now declares its
handlers and handler type as being 1-arg, thus reflecting the reality
that the core has actually being using 1-arg handlers.

This makes a whole bunch of compiler noise like this go away:

    perl.h:2825:51: warning: cast between incompatible function types
    from ‘__sighandler_t’ {aka ‘void (*)(int)’} to ‘void (*)(int,
    siginfo_t *, void *)’ {aka ‘void (*)(int,  struct <anonymous> *,
    void *)’} [-Wcast-function-type]

In theory this should make no functional difference. It might cause
3rd-party XS modules to emit compiler warnings now if they are relying
on things like Sighandler_t to represent a 3-arg function - this commit
flips it to being 1-arg.

3 years agoPOSIX::sigaction(): use correct sig handler
David Mitchell [Mon, 11 Nov 2019 16:06:26 +0000 (16:06 +0000)]
POSIX::sigaction(): use correct sig handler

Depending on whether sigaction() is called with the SA_SIGINFO flag set,
it should be setting either a 1-arg or 3-arg signal handler for the
kernel to call back. In fact it was always passing a 3-arg handler, and
telling the kernel that it was a 1-arg handler, which means that in
1-arg handler situations, the handler was being called with args 2 and 3
containing random garbage.

Instead, use the newly-added explicit-arg handler functions, which take
the specified number of args regardless of OS / configuration.`

There's a temporary hack included in the patch because perl core is
still claiming to use 3-arg handlers while actually supplying 1-arg
ones. This will be fixed shortly and the hack removed.

3 years agoadd explicit 1-arg and 3-arg sig handler functions
David Mitchell [Mon, 11 Nov 2019 15:49:58 +0000 (15:49 +0000)]
add explicit 1-arg and 3-arg sig handler functions

Currently, whether the OS-level signal handler function is declared as
1-arg or 3-arg depends on the configuration. Add explicit versions of
these functions, principally so that POSIX.xs can call which version of
the handler it wants regardless of configuration: see next commit.

3 years agofix unsafe signals under exceptions
David Mitchell [Mon, 11 Nov 2019 14:03:41 +0000 (14:03 +0000)]
fix unsafe signals under exceptions

The preceding commit flagged up an existing bug, but kept old the buggy
behaviour. This commit fixes the bug. I haven't added a test, since it
seems that the test suite doesn't try with unsafe signals. But this

    $SIG{USR1} = sub { $gotit++, die };
    eval { kill SIGUSR1, $$ } for 1..2;
    print "gotit=$gotit\n";

when run before erroneously gave 1, but now correctly gives 2.

Basically the code that restores the signal mask after a sig handler
dies, should do it only in a direct (unsafe) signal handler: the
deferred (safe) signal handler will have already done it. The bug was
that the inbuilt perl unsafe signal handler was being incorrectly
treated as safe. The code path via POSIX (and for which a test was added
with v5.13.9-531-gc22d665b55) *was* ok.

3 years agoadd a new function, Perl_perly_sighandler()
David Mitchell [Mon, 11 Nov 2019 11:26:45 +0000 (11:26 +0000)]
add a new function, Perl_perly_sighandler()

This function implements the body of what used to be Perl_sighandler(),
the latter becoming a thin wrapper round Perl_perly_sighandler().

The main reason for this change is that it allows us to add an extra
arg, 'safe' to the function without breaking backcompat. This arg
indicates whether the function is being called directly from the OS
signal handler (safe==0), or deferred via Perl_despatch_signals()

This allows an infelicity in the code to be fixed - it was formerly
trying to determine the route it had been called by (and hence whether a
'safe' route) by seeing if either of the sig/uap parameters was
non-null. It turns out that this was highly dogdy, and only worked by
luck. The safe caller did indeed pass NULL args, but due to a bug
(shortly to be fixed), sometimes the kernel thinks its calling a 1-arg
sig handler when its actually calling a 3-arg one. This means that the
sig/uap args are random garbage, and happen to be non-zero only by happy
coincidence on the OS/platforms so far.

Also, it turns out that the call via Perl_csighandler() was getting it
wrong: its explicit (NULL,NULL) args made it look like a safe signal
call. This will be corrected in the next commit, but for this commit the
old wrong behaviour is preserved.

See RT #82040 for details of when/why the original dodgy 'safe' check

3 years agoadd PERL_USE_3ARG_SIGHANDLER macro
David Mitchell [Mon, 11 Nov 2019 10:46:56 +0000 (10:46 +0000)]

There are a bunch of places in core that do

   #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)

to decide whether the C signal handler function should be declared with,
and called with, 1 arg or 3 args.

This commit just adds

   #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)

Then uses the new macro in all other places rather than checking
HAS_SIGACTION and SA_SIGINFO. Thus there is no functional change; it just
makes the code more readable.

However, it turns out that all is not well with core's use of 1-arg
versus 3-arg, and the few commits will fix this.

3 years agoadd Siginfo_t
David Mitchell [Thu, 7 Nov 2019 12:30:14 +0000 (12:30 +0000)]
add Siginfo_t

From the code comments:

    This is an alias for the OS's siginfo_t, except that where the OS
    doesn't support it, declare a dummy version instead. This allows us to
    have signal handler functions which always have a Siginfo_t parameter
    regardless of platform, (and which will just be passed a NULL value
    where the OS doesn't support HAS_SIGACTION).

It doesn't actually do anything useful yet, but will shortly allow
signal handler functions to be rationalised.

3 years agoregcomp.h: Fix up comment
Karl Williamson [Mon, 18 Nov 2019 03:39:11 +0000 (20:39 -0700)]
regcomp.h: Fix up comment

3 years agoAdd ANYOFRb regnode
Karl Williamson [Sat, 21 Sep 2019 15:51:52 +0000 (09:51 -0600)]
Add ANYOFRb regnode

This is like the ANYOFR regnode added in the previous commit, but all
code points in the range it matches are known to have the same first
UTF-8 start byte.  That means it can't match UTF-8 invariant characters,
like ASCII, because the "start" byte is different on each one, so it
could only match a range of 1, and the compiler wouldn't generate this
node for that; instead using an EXACT.

Pattern matching can rule out most code points by looking at the first
character of their UTF-8 representation, before having to convert from

On ASCII this rules out all but 64 2-byte UTF-8 characters from this
simple comparison.  3-byte it's up to 4096, and 4-byte, 2**18, so the
test is less effective for higher code points.

I believe that most UTF-8 patterns that otherwise would compile to
ANYOFR will instead compile to this, as I can't envision real life
applications wanting to match large single ranges.  Even the 2048
surrogates all have the same first byte.

3 years agoAdd ANYOFR regnode
Karl Williamson [Thu, 19 Sep 2019 22:03:04 +0000 (16:03 -0600)]
Add ANYOFR regnode

This matches a single range of code points.  It is both faster and
smaller than other ANYOF-type nodes, requiring, after set-up, a single
subtraction and conditional branch.

The vast majority of Unicode properties match a single range (though
most of the properties likely to be used in real world applications have
more than a single range).  But things like [ij] are a single range, and
those are quite commonly encountered.  This new regnode matches them more
efficiently than a bitmap would, and doesn't require the space for one

The flags field is used to store the minimum matchable start byte for
UTF-8 strings, and is ignored for non-UTF-8 targets.  This, like ANYOFH
nodes which have a similar mechanism, allows for quick weeding out of
many possible matches without having to convert the UTF-8 to its
corresponding code point.

This regnode packs the 32 bit argument with 20 bits for the minimum code
point the node matches, and 12 bits for the maximum range.  If the input
is a value outside these, it simply won't compile to this regnode,
instead going to one of the ANYOFH flavors.

ANYOFR is sufficient to match all of Unicode except for the final
(private use) 65K plane.

3 years agoregcomp.c: Use variables initialized to macro results
Karl Williamson [Thu, 19 Sep 2019 21:47:51 +0000 (15:47 -0600)]
regcomp.c: Use variables initialized to macro results

instead of the macros.  This is in preparation for the next commit.

3 years agoregexec.c: Rmv some unnecessary casts
Karl Williamson [Thu, 19 Sep 2019 22:04:03 +0000 (16:04 -0600)]
regexec.c: Rmv some unnecessary casts

The called macro does the cast, and this makes it more legibile

3 years agoregcomp.c: Add parameter to static function
Karl Williamson [Thu, 19 Sep 2019 20:20:59 +0000 (14:20 -0600)]
regcomp.c: Add parameter to static function

This further decouples this function from knowing details of the calling
structure, by passing this detail in.

3 years agot/re/anyof.t: Add a test
Karl Williamson [Wed, 18 Sep 2019 19:20:42 +0000 (13:20 -0600)]
t/re/anyof.t: Add a test

This makes sure a non-folding above-Latin1 character is tested.

3 years agoPrefer EXACTish regnodes to ANYOFH nodes
Karl Williamson [Wed, 18 Sep 2019 19:12:51 +0000 (13:12 -0600)]
Prefer EXACTish regnodes to ANYOFH nodes

ANYOFH nodes (that match code points above 255) are smaller than regular
ANYOF nodes because they don't have a 256-bit bitmap.  But the
disadvantage of them over EXACT nodes is that the characters encountered
must first be converted from UTF-8 to code point to see if they match
the ANYOFH.  (The difference is less clearcut with /i, because typically,
currently, the UTF-8 must be converted to code point anyway in order to
fold them.)  But the EXACTFish node doesn't have an inversion list to do
lookup in, and occupies less space, because it doesn't have inversion
list data attached to it.

Also there is a bug in using ANYOFH under /l, as wide character warnings
should be emitted if the locale isn't a UTF-8 one.

The reason this change hasn't been made before (by me anyway) is that
the old way avoided upgrading the pattern to UTF-8.  But having thought
about this for a long time, to match this node, the target string must
be in UTF-8 anyway, and having a UTF8ness mismatch slows down pattern
matching, as things have to be continually converted, and reconverted
after backtracking.

3 years agoAdd -Dy debugging of tr///, y///
Karl Williamson [Thu, 7 Nov 2019 17:42:14 +0000 (10:42 -0700)]
Add -Dy debugging of tr///, y///

3 years agot/re/anyof.t: Fix highest range tests
Karl Williamson [Wed, 18 Sep 2019 18:45:55 +0000 (12:45 -0600)]
t/re/anyof.t: Fix highest range tests

Previously we had infinity minus 1, but infinity should be beyond the
range, and the highest isn't infinity - 1, but the highest legal code

3 years agot/re/anyof.t: Remove duplicate test
Karl Williamson [Wed, 18 Sep 2019 18:41:41 +0000 (12:41 -0600)]
t/re/anyof.t: Remove duplicate test

These are covered by the single code point tests.

3 years agot/re/anyof.t: Remove invalid test
Karl Williamson [Wed, 18 Sep 2019 18:34:23 +0000 (12:34 -0600)]
t/re/anyof.t: Remove invalid test

One shouldn't be able to specify an infinite code point.  The tests have
the conceit that one can specify a range's upper limit as infinity, but
that is just shorthand for the range being unbounded.

3 years agore/anyof.t: Clarify failing message
Karl Williamson [Wed, 18 Sep 2019 18:31:11 +0000 (12:31 -0600)]
re/anyof.t: Clarify failing message

When a test fails, an extra test is run to output debugging info; this
will cause the planned number of tests to be wrong, which will output an
extra, confusing message.  This adds an explanation that the number is
expected to be wrong, hence not to worry.

3 years agoAllow some optimizations of qr/(?[...])/
Karl Williamson [Fri, 13 Sep 2019 02:19:07 +0000 (20:19 -0600)]
Allow some optimizations of qr/(?[...])/

Prior to this commit, this construct always returned an ANYOF node, even
if it could be optimized into something else.

3 years agoDocument SVf format
Karl Williamson [Thu, 7 Nov 2019 20:54:48 +0000 (13:54 -0700)]
Document SVf format

3 years agoclean up quadmath_format_*() functions
Tony Cook [Mon, 11 Nov 2019 22:11:34 +0000 (09:11 +1100)]
clean up quadmath_format_*() functions

This includes:

- remove them from the API

- simplify quadmath_format_single()'s interface, and rename it
  to match the new interface

fixes #17288

3 years agoRemove generation and use of NonFinalFold table
Karl Williamson [Sat, 16 Nov 2019 18:31:23 +0000 (11:31 -0700)]
Remove generation and use of NonFinalFold table

With the revamping done in cc288b7a2732c37504039083ebb98241954636be, the
table of Unicode case folds that are more than a single character is no
longer used, so no need to generate it, or having it available.

3 years agomktables: Fix non-final-fold table
Karl Williamson [Fri, 1 Nov 2019 03:30:34 +0000 (21:30 -0600)]
mktables: Fix non-final-fold table

This wasn't generating the correct values.  It is no longer used, and
the next commit will remove it, but I wanted to get it right, in case it
is ever needed again.

3 years agoMerge branch 'multi-fold' into blead
Karl Williamson [Sat, 16 Nov 2019 18:14:15 +0000 (11:14 -0700)]
Merge branch 'multi-fold' into blead

These few commits fix the code that avoids splitting a multi-character
fold across EXACTFish nodes in regex patterns

3 years agoRevamp finding splittable places in /i full node
Karl Williamson [Thu, 14 Nov 2019 22:26:53 +0000 (15:26 -0700)]
Revamp finding splittable places in /i full node

Commits 3ae8ec479bc65ef004bd856d90b82106186771d9 and
cc1ed6368d665290794d7c24d1dbeb42466e256a didn't actually work.

Tests in pat_advanced.t would have failed, except that optimizations in
the regex engine in the meantime led to the tests not actually testing
what they originally did.

I believe that this finally gets it right for non-/l.

The problem is when an EXACTFish node becomes full, you don't want to
split across a multi-char fold.  To use a fairly familiar example, we
can't split between 'ss', as that sequence matches a LATIN SMALL LETTER
SHARP S, and the way the regex engine currently works, it can't see
beyond the current node; it would see one or the other 's' but not the
sequence.  So the code backs off one character and checks if it can
split there.  If not, it repeats until it finds such a place or gets to
the beginning.  If the entire node is all 's'es, for example, there's no
good place to split.  So it gives up and takes all of them.

One thing I hadn't realized before is when there are three-character
folds, you can't split if the current position is the beginning of the
three, but also when it is the second of the three.

3 years agoregcharclass.h: Add some macros
Karl Williamson [Thu, 14 Nov 2019 16:55:08 +0000 (09:55 -0700)]
regcharclass.h: Add some macros

These macros will be used in a future commit, and are for
three-character folds.  regen/regcharclass*.pl are changed for this

3 years agopat_advanced.t: Update test
Karl Williamson [Thu, 14 Nov 2019 15:43:33 +0000 (08:43 -0700)]
pat_advanced.t: Update test

This test was no longer exercising the code it once had, because ':'
doesn't go in a folded regnode.  Change to use a character that does
have a fold.

And doing so shows that something in the past broke this test.  This
branch will fix that; in the meantime make some tests TODO

3 years agoS_regatom: reinitialize flags if reparsing
Karl Williamson [Thu, 14 Nov 2019 20:46:53 +0000 (13:46 -0700)]
S_regatom: reinitialize flags if reparsing

Sometimes we have to reparse a node.  We need to reset the flags to
avoid contamination from the first parse, where a flag got set by a
character in it that won't actually be in the reparsed version.

3 years agoRevamp S_regatom() handling of non-UTF-8 folds
Karl Williamson [Thu, 14 Nov 2019 20:30:23 +0000 (13:30 -0700)]
Revamp S_regatom() handling of non-UTF-8 folds

This accomplishes two things.  One is that prior to this commit, a
character being added to the node could set some flags before we
determine that the character won't even fit in the node.  So the flags
get set inappropriately.  This may be harmless except for performance
penalties; I don't know.

The other thing it does is to make sure 'ender' is not changed in the
loop.  A future commit with depend on that.

3 years agoregcomp.c: Avoid a Copy
Karl Williamson [Thu, 14 Nov 2019 20:21:40 +0000 (13:21 -0700)]
regcomp.c: Avoid a Copy

By reserving a few more bytes at the beginning of the loop, which will
be given back at the end anyway, we can avoid a temporary variable and a

3 years agoregcomp.c: White space, comment only
Karl Williamson [Thu, 14 Nov 2019 17:35:15 +0000 (10:35 -0700)]
regcomp.c: White space, comment only

One comment was outdated.

3 years agoregen/ Simplify
Karl Williamson [Thu, 14 Nov 2019 16:49:50 +0000 (09:49 -0700)]
regen/ Simplify

This creates a simply named array instead of a more complicated array
ref, so is easier to understand

3 years agoregen/ Use printable char
Karl Williamson [Thu, 14 Nov 2019 16:36:48 +0000 (09:36 -0700)]
regen/ Use printable char

It makes the result more legible if it uses the printable character
instead of an escape sequence when appropriate.

Although, currently, the value is re-escaped for output.  This helped
during debugging.

3 years agoregen/ Fix comments
Karl Williamson [Thu, 14 Nov 2019 16:33:39 +0000 (09:33 -0700)]
regen/ Fix comments

3 years agoInitial Windows Github action, adapted from skaji
Max Maischein [Fri, 15 Nov 2019 19:16:32 +0000 (20:16 +0100)]
Initial Windows Github action, adapted from skaji

This supports

    * 64bit MSVC 2019 (MSVC142)
    * 64bit Mingw64 as supplied by Strawberry Perl
    * 64bit Cygwin gcc
    * 32bit MSVC 2010 (MSVC100FREE)


    * Only clone the repo 10 levels deep (we need only one?)
    * Parallel build on the one environment where it works (Cygwin)
    * Ready for clcache / ccache, but these need a 100% pass before
      Github saves the results to the cache

3 years agoDouble the number of possible SV types
Karl Williamson [Thu, 31 Oct 2019 19:42:04 +0000 (13:42 -0600)]
Double the number of possible SV types

As per discussion beginning in

3 years agoregcomp.h: Fix comment
Karl Williamson [Sat, 16 Nov 2019 12:29:38 +0000 (05:29 -0700)]
regcomp.h: Fix comment

3 years agoembed.fnc: Parameter is really a const
Karl Williamson [Sat, 16 Nov 2019 12:28:41 +0000 (05:28 -0700)]
embed.fnc: Parameter is really a const

Make it so.

3 years agodoop.c, op.c: Silence some compiler warnings
Karl Williamson [Sat, 16 Nov 2019 05:23:44 +0000 (22:23 -0700)]
doop.c, op.c: Silence some compiler warnings

3 years agoPATCH: gh#17218 memory leak
Karl Williamson [Fri, 15 Nov 2019 22:01:15 +0000 (15:01 -0700)]
PATCH: gh#17218 memory leak

Indeed, a variable's ref count was not getting decremented.

3 years agowin32: Add more missing wchar.h includes
Dagfinn Ilmari Mannsåker [Mon, 22 Jul 2019 09:44:15 +0000 (10:44 +0100)]
win32: Add more missing wchar.h includes

3 years agoAdd missing wchar.h include to Win32API::File
Dagfinn Ilmari Mannsåker [Mon, 22 Jul 2019 09:37:30 +0000 (10:37 +0100)]
Add missing wchar.h include to Win32API::File

3 years agoregcomp.sym: Add detail to some node descriptions
Karl Williamson [Thu, 14 Nov 2019 16:28:14 +0000 (09:28 -0700)]
regcomp.sym: Add detail to some node descriptions

Having this enabled me to more quickly understand what's going on.

A trailing period is removed from some long descriptions to make them
slightly shorter.

3 years agoutf8.h: Use MAX() macro instead of its expansion
Karl Williamson [Thu, 14 Nov 2019 15:33:31 +0000 (08:33 -0700)]
utf8.h: Use MAX() macro instead of its expansion

It makes things a little clearer.

3 years agoFix FEATURE_${NAME}_IS_ENABLED macro for default features
Dagfinn Ilmari Mannsåker [Thu, 14 Nov 2019 12:12:07 +0000 (12:12 +0000)]
Fix FEATURE_${NAME}_IS_ENABLED macro for default features

Commit 9f601cf3bbfa6be3e2ab3468e77a7b79c80ff5cf changed feature checks
from using a hash lookup to a bitmap check, but the macro definition
for enabled-by-default had the wrong macro name for the mask check,
and had `\L` instead of `\U` for the bit macro.  Change them all to
use the already-uppercase `$NAME` variable.

We don't actually have any default-enabled features since array_base
was removed, but in converting TonyC's 'noindirect' feature into a
default-enabled 'indirect' feature, I got bitten by this.

3 years agoperldelta updates
Tony Cook [Wed, 13 Nov 2019 22:14:16 +0000 (09:14 +1100)]
perldelta updates

3 years agoperldelta for 6bd6308f
Chris 'BinGOs' Williams [Tue, 12 Nov 2019 21:55:21 +0000 (21:55 +0000)]
perldelta for 6bd6308f

3 years agoFix: local variable hiding parameter of same name
James E Keenan [Fri, 8 Nov 2019 15:17:50 +0000 (10:17 -0500)]
Fix: local variable hiding parameter of same name

LGTM provides static code analysis and recommendations for code quality
improvements.  Their recent run over the Perl 5 core distribution
identified 12 instances where a local variable hid a parameter of
the same name in an outer scope.  The LGTM rule governing this situation
can be found here:


This patch renames local variables in approximately 8 of those instances
to comply with the LGTM recommendation.  Suggestions for renamed
variables were made by Tony Cook.


3 years agoremove leak in tr/ascii/utf8/
David Mitchell [Tue, 12 Nov 2019 15:34:55 +0000 (15:34 +0000)]
remove leak in tr/ascii/utf8/

The recent change to use invlists left a bug in S_do_trans_invmap()
whereby it allocated a new temp buf if it knew the resulting string
would be too long, but failed to free the buffer at the end.

Showed up as smokes under ASAN failing these tests:


3 years agoMemoize: fix test timing
David Mitchell [Tue, 12 Nov 2019 13:18:43 +0000 (13:18 +0000)]
Memoize: fix test timing

NB: this distro is upstream-CPAN, but there hasn't been a new release in
7 years, so I'm patching this intermittently false positive test
directly in blead.

I reported this issue 4 years ago as

cpan/Memoize/t/speed.t occasionally fails tests 2 and 5 in bleadperl

This is because the time deltas (using "time") have a granularity of 1
sec. The basic test is: run fib() for at least 10 secs, then run again
with memoize and check that it takes less than 1/10th of that time.

However, the first measurement may be exactly 10 secs, while the second
run (no matter how speedy) may be 1 sec if it passes over a tick
boundary. 0.001 is then added to it to avoid division by zero.

The test is ($ELAPSED/$ELAPSED2 > 10).  With $ELAPSED = 10 and
$ELAPSED2 = 1.001, the test fails. The easy fix is to run for at least
11 secs rather than 10.

3 years agofix build under PERL_GLOBAL_STRUCT_PRIVATE
David Mitchell [Tue, 12 Nov 2019 12:45:29 +0000 (12:45 +0000)]

sprinkle a few random 'dVAR's at the top of some fns.

3 years agoAdapt Configure to GCC version 10
Petr Písař [Tue, 12 Nov 2019 08:19:18 +0000 (09:19 +0100)]
Adapt Configure to GCC version 10

I got a notice from Jeff Law <>:

    Your particular package fails its testsuite. This was ultimately
    tracked down to a Configure problem. The perl configure script treated
    gcc-10 as gcc-1 and turned on -fpcc-struct-return. This is an ABI
    changing flag and caused Perl to not be able to interact properly with
    the dbm libraries on the system leading to a segfault.

His proposed patch corrected only this one instance of the version
mismatch. Reading the Configure script revealed more issues. This
patch fixes all of them I found.

Please note I do not have GCC 10 available, I tested it by faking the version

--- a/Configure
+++ b/Configure
@@ -4672,7 +4672,7 @@ $cat >try.c <<EOM
 int main() {
 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
 #ifdef __VERSION__
-       printf("%s\n", __VERSION__);
+       printf("%s\n", "10.0.0");
        printf("%s\n", "1");

3 years agoPATCH: [gh #17185] Improper 'unescaped lbrace' msg
Karl Williamson [Tue, 12 Nov 2019 04:48:46 +0000 (21:48 -0700)]
PATCH: [gh #17185] Improper 'unescaped lbrace' msg

This warning is simply deleted.  The possible places where an unescaped
left brace is illegal has been scaled back to avoid breaking more
existing code, and this context will remain legal.

3 years agoext/DynaLoader/dl_aix.xs: Use isDIGIT macro
Karl Williamson [Thu, 3 Oct 2019 03:11:14 +0000 (21:11 -0600)]
ext/DynaLoader/dl_aix.xs: Use isDIGIT macro

which is more efficient

3 years agomalloc.c: Use isDIGIT macro instead of hand-rolling it
Karl Williamson [Sat, 7 Sep 2019 15:18:49 +0000 (09:18 -0600)]
malloc.c: Use isDIGIT macro instead of hand-rolling it

The macro is more efficient

3 years agot/re/regexp.t: Only convert to EBCDIC once
Karl Williamson [Fri, 6 Sep 2019 16:23:26 +0000 (10:23 -0600)]
t/re/regexp.t: Only convert to EBCDIC once

Some tests get added as we go along, and those added tests have already
been converted to EBCDIC if necessary.  Don't reconvert, which messes
things up.

3 years agore/regexp.t: Change variable name to be more meaningful
Karl Williamson [Fri, 6 Sep 2019 15:49:41 +0000 (09:49 -0600)]
re/regexp.t: Change variable name to be more meaningful

3 years agoutf8.h: Use a cast to U8 to avoid an AND
Karl Williamson [Sat, 5 Oct 2019 22:43:10 +0000 (16:43 -0600)]
utf8.h: Use a cast to U8 to avoid an AND

3 years agoop.c: Move #endif
Karl Williamson [Tue, 12 Nov 2019 00:12:45 +0000 (17:12 -0700)]
op.c: Move #endif

Otherwise this fails to compile on EBCDIC

3 years agoregen/ Allow for declaring table size.
Karl Williamson [Tue, 12 Nov 2019 00:09:13 +0000 (17:09 -0700)]
regen/ Allow for declaring table size.

This fixes a bug where xlc requires the size of the array.

3 years agoutfebcdic.h: Add comments
Karl Williamson [Thu, 3 Oct 2019 04:04:12 +0000 (22:04 -0600)]
utfebcdic.h: Add comments

3 years agohandle s being updated without len being updated
Tony Cook [Mon, 11 Nov 2019 03:43:42 +0000 (14:43 +1100)]
handle s being updated without len being updated

fix #17279

3 years agoUpdate IO-Compress to CPAN version 2.090
Chris 'BinGOs' Williams [Sun, 10 Nov 2019 18:20:21 +0000 (18:20 +0000)]
Update IO-Compress to CPAN version 2.090


  2.090 9 November 2019

      * MANIFEST error for streamzip

3 years agoUpdate Compress-Raw-Zlib to CPAN version 2.090
Chris 'BinGOs' Williams [Sun, 10 Nov 2019 18:18:10 +0000 (18:18 +0000)]
Update Compress-Raw-Zlib to CPAN version 2.090


  2.090 9 November 2019

      * No Changes

3 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.090
Chris 'BinGOs' Williams [Sun, 10 Nov 2019 18:17:04 +0000 (18:17 +0000)]
Update Compress-Raw-Bzip2 to CPAN version 2.090


  2.090 9 November 2019

      * No Changes

3 years agoUpdate Module-Load-Conditional to CPAN version 0.70
Chris 'BinGOs' Williams [Sun, 10 Nov 2019 17:50:09 +0000 (17:50 +0000)]
Update Module-Load-Conditional to CPAN version 0.70


0.70    Sun Nov 10 14:28:41 GMT 2019

* Protect ourselves from Module::Metadata parsing problems
  [ RT#130939 ]

3 years agoTen-ten let's do it again
Chris 'BinGOs' Williams [Sun, 10 Nov 2019 17:48:54 +0000 (17:48 +0000)]
Ten-ten let's do it again

3 years agot/op/fork.t: fix skip condition
Tomasz Konojacki [Sun, 10 Nov 2019 16:37:50 +0000 (17:37 +0100)]
t/op/fork.t: fix skip condition

'is_miniperl' was being parsed as a bareword so the condition was
always true on Windows.

3 years agowin32: fix waitpid(-1, WNOHANG) segfault/panic
Tomasz Konojacki [Sun, 10 Nov 2019 06:14:01 +0000 (07:14 +0100)]
win32: fix waitpid(-1, WNOHANG) segfault/panic

waitpid(-1, WNOHANG) would panic or segfault if called when the
thread's message queue is not empty.

Thanks to Erik Jezierski for the report and diagnosis.

[gh #16529]

3 years agoImport perl5301delta.pod
Steve Hay [Sun, 10 Nov 2019 14:59:55 +0000 (14:59 +0000)]
Import perl5301delta.pod

3 years agoUpdate Module-CoreList with data for 5.30.1
Steve Hay [Sun, 10 Nov 2019 14:55:51 +0000 (14:55 +0000)]
Update Module-CoreList with data for 5.30.1

3 years agoTick off 5.30.1
Steve Hay [Sun, 10 Nov 2019 14:31:50 +0000 (14:31 +0000)]
Tick off 5.30.1

3 years agoAdd epigraph for 5.30.1
Steve Hay [Sun, 10 Nov 2019 14:30:53 +0000 (14:30 +0000)]
Add epigraph for 5.30.1

3 years ago5.30.1 today
Steve Hay [Sun, 10 Nov 2019 12:20:29 +0000 (12:20 +0000)]
5.30.1 today

3 years agoUTF8_CHK_SKIP uses MIN() too
Tomasz Konojacki [Sat, 9 Nov 2019 01:26:38 +0000 (02:26 +0100)]
UTF8_CHK_SKIP uses MIN() too

This fixes compilation with Visual C++

3 years agosync with cpan release of Devel-PPPort 3.55
Nicolas R [Fri, 8 Nov 2019 17:16:04 +0000 (10:16 -0700)]
sync with cpan release of Devel-PPPort 3.55

3 years agoPrepare Changelog and version for coming release
Nicolas R [Thu, 7 Nov 2019 18:40:08 +0000 (11:40 -0700)]
Prepare Changelog and version for coming release

3 years agoparts/inc/misc: Convert to use ivers()
Karl Williamson [Sun, 27 Oct 2019 00:53:08 +0000 (18:53 -0600)]
parts/inc/misc: Convert to use ivers()

Doing this showed me a redundant test.

I didn't have to take out the zeros, it just looks better without them.

(cherry picked from commit 9e0e078a1aefa78df3322c87b01323862e05c397)
Signed-off-by: Nicolas R <>
3 years agoparts/inc/inctools: ivers(): Add version string inputs
Karl Williamson [Sun, 27 Oct 2019 00:51:29 +0000 (18:51 -0600)]
parts/inc/inctools: ivers(): Add version string inputs

(cherry picked from commit bb54da9a565f7fcf13708a69ed6a33a36bb32745)
Signed-off-by: Nicolas R <>
3 years agoHACKERS: add more details; use of ivers()
Karl Williamson [Sun, 27 Oct 2019 00:47:58 +0000 (18:47 -0600)]
HACKERS: add more details; use of ivers()

(cherry picked from commit 1f521ca952d70d2a93afa18e7069b162d64949f0)
Signed-off-by: Nicolas R <>
3 years agoparts/inc/inctools: Add short synonym for int_parse_version
Karl Williamson [Thu, 24 Oct 2019 17:26:43 +0000 (11:26 -0600)]
parts/inc/inctools: Add short synonym for int_parse_version

(cherry picked from commit 3df9d356984187e51559b28cd6653cfffef94bff)
Signed-off-by: Nicolas R <>
3 years agomktests.PL: Require inctools in .t files
Karl Williamson [Thu, 24 Oct 2019 17:16:24 +0000 (11:16 -0600)]
mktests.PL: Require inctools in .t files

This will allow them to use the functions therein.

(cherry picked from commit 48bb078538a75f644588489b4d59f39d1d3d5711)
Signed-off-by: Nicolas R <>
3 years agoutf8_to_uvchr_buf() Return proper length
Karl Williamson [Thu, 24 Oct 2019 03:19:47 +0000 (21:19 -0600)]
utf8_to_uvchr_buf() Return proper length

When input UTF-8 is 13 bytes, return 13, even on 32 bit machines where
overflow happens at 7 UTF-8 bytes.

(cherry picked from commit f379e2ee4277fc855a37b82c6c94294c4e0e8c8d)
Signed-off-by: Nicolas R <>