This is a live mirror of the Perl 5 development currently hosted at
6 years agoutf8.h: Refactor a macro
Karl Williamson [Fri, 6 Nov 2015 17:56:23 +0000 (10:56 -0700)]
utf8.h: Refactor a macro

This new definition expands to the same thing as before, but now the
unexpanded text is identical to the EBCDIC definition (which expands to
something else), so the next commit can combine the ASCII and EBCDIC
ones into a single definition.

6 years agoutf8.h: Use common macro to avoid repeating
Karl Williamson [Fri, 6 Nov 2015 17:44:36 +0000 (10:44 -0700)]
utf8.h: Use common macro to avoid repeating

This refactors two macros that have mostly the same guts to have a third
macro to define the common guts.

It also changes to use UV_IS_QUAD instead of a home-grown #define that a
future commit will remove.

6 years agoutf8.h: Move #define within file
Karl Williamson [Fri, 6 Nov 2015 17:37:56 +0000 (10:37 -0700)]
utf8.h: Move #define within file

This makes 2 related definitions adjacent.

6 years agoutf8.h: Combine EBCDIC and ASCII #defines
Karl Williamson [Fri, 6 Nov 2015 17:06:32 +0000 (10:06 -0700)]
utf8.h: Combine EBCDIC and ASCII #defines

Change to use the same definition for two macros on both types of
platforms, simplifying the code, by using the underlying structure of
the encoding.

6 years agoutf8.h: Move #define to earlier in the file
Karl Williamson [Fri, 6 Nov 2015 16:36:54 +0000 (09:36 -0700)]
utf8.h: Move #define to earlier in the file

And use its mnemonic in other #defines instead of repeating the raw

6 years agoutf8.h, Clean up some casts
Karl Williamson [Fri, 6 Nov 2015 16:11:55 +0000 (09:11 -0700)]
utf8.h, Clean up some casts

By making sure the no-op macros cast the output appropriately, we can
eliminate the casts that have been added in things that call them

6 years agoutf8.h: Combine ASCII and EBCDIC defines into one
Karl Williamson [Fri, 6 Nov 2015 19:54:55 +0000 (12:54 -0700)]
utf8.h: Combine ASCII and EBCDIC defines into one

By using a more fundamental value, these two definitions of the macro
can be made the same, so only need one, common to both platforms

6 years agoutfebcdic.h: Use an internal macro to avoid repeating
Karl Williamson [Fri, 30 Oct 2015 16:01:09 +0000 (10:01 -0600)]
utfebcdic.h: Use an internal macro to avoid repeating

This creates a macro that is used in portions of 2 other macros, thus
removing repetition.

6 years agoutf8.h, utfebcdic.h: Fix-up UTF8_MAXBYTES_CASE defn
Karl Williamson [Fri, 30 Oct 2015 03:19:40 +0000 (21:19 -0600)]
utf8.h, utfebcdic.h: Fix-up UTF8_MAXBYTES_CASE defn

The definition had gotten moved away from its comments in utf8.h, and
the wrong thing was being guarded by a #error, (UTF8_MAXBYTES instead).
And it is possible to generalize to get the compiler to do the
calculation, and to consolidate the definitions from the two files into
a single one.

6 years agoamigaos4: use raise() instead of kill() on ourselves
Andy Broad [Sat, 5 Dec 2015 14:38:15 +0000 (09:38 -0500)]
amigaos4: use raise() instead of kill() on ourselves

Using kill() on the same task that called kill() circumvents
Perl's signal handlers, but raise() doesn't, so use that instead.

6 years agohexfp: Use Perl_fp_class_nzero unconditionally.
Jarkko Hietaniemi [Fri, 4 Dec 2015 23:22:30 +0000 (18:22 -0500)]
hexfp: Use Perl_fp_class_nzero unconditionally.

Otherwise in platforms with Perl_fp_class_nzero there would be no
return for the x != 0.0 case.

6 years agohexfp: these should be tested only with uselongdouble.
Jarkko Hietaniemi [Fri, 4 Dec 2015 22:04:34 +0000 (17:04 -0500)]
hexfp: these should be tested only with uselongdouble.

6 years agoHave more fallbacks for our signbit() emulation.
Jarkko Hietaniemi [Fri, 4 Dec 2015 00:06:49 +0000 (19:06 -0500)]
Have more fallbacks for our signbit() emulation.

These help in systems which do not have signbit(), or fail to find one,
or which explicitly disable it.

The idea for the fallback implementation from Craig Berry.

6 years ago[PATCH] Bump Locale-Codes from 3.36 to 3.37
Sullivan Beck [Thu, 3 Dec 2015 16:02:15 +0000 (16:02 +0000)]
[PATCH] Bump Locale-Codes from 3.36 to 3.37

Signed-off-by: Chris 'BinGOs' Williams <>
6 years agoUpdate Unicode-Normalize to CPAN version 1.24
Chris 'BinGOs' Williams [Thu, 3 Dec 2015 15:56:35 +0000 (15:56 +0000)]
Update Unicode-Normalize to CPAN version 1.24


1.24  Sun Nov 29 05:48:44 UTC 2015
    - Updated to use most recent GNU license file.
      ( )
    - Silence compiler warning message
      ( )
    - Add kwalitee suggested changes.

6 years agoUpdate PathTools to CPAN version 3.60
Chris 'BinGOs' Williams [Thu, 3 Dec 2015 14:24:22 +0000 (14:24 +0000)]
Update PathTools to CPAN version 3.60

6 years agoperlxs.pod: clarify PROTOTYPES: behaviour.
David Mitchell [Thu, 3 Dec 2015 15:31:17 +0000 (15:31 +0000)]
perlxs.pod: clarify PROTOTYPES: behaviour.

The default is to disable rather than enable.

Also mention the "Please specify prototyping behavior for Foo.xs"

6 years agothreads.t: make stress test less stressy
David Mitchell [Thu, 3 Dec 2015 14:30:10 +0000 (14:30 +0000)]
threads.t: make stress test less stressy

Test 10 creates 100 threads that do 'require IO'. This can use a lot
of memory and other resources. reduce it to 10.

6 years agoUndo blead customization of Text-ParseWords test script
Steve Hay [Thu, 3 Dec 2015 14:00:55 +0000 (14:00 +0000)]
Undo blead customization of Text-ParseWords test script

The customization simply changed DOS EOLs to UNIX EOLs, dating from a time
when the intention was to get all files in blead into UNIX EOL format.
However, since then many more files have crept in with DOS EOLs (for
example, many files under cpan/Pod-Checker, cpan/Pod-Parser and
cpan/Pod-Usage have DOS EOLs in my Git workspace (on Windows) and in the
most recent perl release tarballs (5.22.1-RC3 (made from Windows) and
5.23.5 (not made from Windows AFAIK))) and they clearly do no harm, so
there is no point in trying to make all files have UNIX EOLs and keep them
that way, and therefore no point in this customization.

The GitHub PR that was referenced in Porting/ has already
been closed (not merged).

There are no changes to ParseWords.t here other than the EOLs.

6 years agoAdd the -Wthread-safety also only for clang 3.6 (6.1) or later.
Jarkko Hietaniemi [Thu, 3 Dec 2015 12:00:16 +0000 (07:00 -0500)]
Add the -Wthread-safety also only for clang 3.6 (6.1) or later.

(follow-up to bdc795f4, suggested by Aaron Crane)

6 years agoConfig-Perl-V bump in
Chris 'BinGOs' Williams [Thu, 3 Dec 2015 10:57:10 +0000 (10:57 +0000)]
Config-Perl-V bump in

6 years agoModule-CoreList bump in
Chris 'BinGOs' Williams [Thu, 3 Dec 2015 10:55:36 +0000 (10:55 +0000)]
Module-CoreList bump in

6 years agofix the API description of SvLEN_set()
David Mitchell [Thu, 3 Dec 2015 10:38:23 +0000 (10:38 +0000)]
fix the API description of SvLEN_set()

RT #126245

Make it clearer that is the buffer length being specified, not the string
length. Also, change the 'See "SvIV_set"' to SvLEN. That appears to be a
cut and paste error.

Based on suggested wording from

6 years agoEnsure 'q' works in debugger with RemotePort.
Shlomi Fish [Wed, 2 Dec 2015 23:22:41 +0000 (18:22 -0500)]
Ensure 'q' works in debugger with RemotePort.

Patch submitted by Shlomi Fish.

For: RT #126735

6 years agoAdd epigraph for 5.22.1-RC3
Steve Hay [Wed, 2 Dec 2015 22:28:25 +0000 (22:28 +0000)]
Add epigraph for 5.22.1-RC3

6 years agoPerl 5.22.1-RC3 today
Steve Hay [Wed, 2 Dec 2015 21:12:15 +0000 (21:12 +0000)]
Perl 5.22.1-RC3 today

6 years agoRevert "Revert "Module::CoreList updates for 5.22.1""
Steve Hay [Wed, 2 Dec 2015 18:12:00 +0000 (18:12 +0000)]
Revert "Revert "Module::CoreList updates for 5.22.1""

This reverts commit 85e4652903c8054317fceac9960608e261acb7f5...
... with some manual changes to now place 5.022001 before 5.023006 instead
of before 5.023005 since 5.023006 is now the impending blead release. Also,
set a tentative 5.22.1 final $VERSION/date of Sun 6th.

6 years agoComplete some unfinished Module::CoreList work from commit 7c294235c2
Steve Hay [Wed, 2 Dec 2015 17:59:46 +0000 (17:59 +0000)]
Complete some unfinished Module::CoreList work from commit 7c294235c2

6 years agoBump the TSA clang minimum to 3.6 (in Applese 6.1)
Jarkko Hietaniemi [Wed, 2 Dec 2015 17:23:01 +0000 (12:23 -0500)]
Bump the TSA clang minimum to 3.6 (in Applese 6.1)

Since it looks like the 3.5 (6.0) in OS X 9 didn't recognize the annotations.

6 years agoFor TSA we want 4 or later clang, not just later.
Jarkko Hietaniemi [Wed, 2 Dec 2015 17:19:40 +0000 (12:19 -0500)]
For TSA we want 4 or later clang, not just later.

(Noticed by Aaron Crane.)

6 years agoMore notes on OS X compiler versions.
Jarkko Hietaniemi [Wed, 2 Dec 2015 15:33:07 +0000 (10:33 -0500)]
More notes on OS X compiler versions.

6 years ago/..\G/: use chars, not bytes
David Mitchell [Wed, 2 Dec 2015 14:53:59 +0000 (14:53 +0000)]
/..\G/: use chars, not bytes

In something like /..\G/, the engine should start trying to match two
chars before pos(). It was actually trying to match two bytes before.

6 years agomarkstack_grow(): fix debugging stuff
David Mitchell [Wed, 2 Dec 2015 12:04:08 +0000 (12:04 +0000)]
markstack_grow(): fix debugging stuff

This is a follow-on to commit ac07059afc75:

    FOOMARK debugging macros: fix %d cast; only -Dsv

which missed fixing up the debugging statement in markstack_grow().

6 years agorpeep(): silence compiler warning
David Mitchell [Wed, 2 Dec 2015 11:49:04 +0000 (11:49 +0000)]
rpeep(): silence  compiler warning

op.c: In function ‘Perl_rpeep’:
op.c:13666:35: warning: comparison is always false due to limited range of data
type [-Wtype-limits]

This condition is always false if for example base is 32 bit and UVs are 64


silence the warning by replacing base with a constant-folded conditional

    (cond ? base : 0) > ....

where cond is false if sizeof(base) is small.

6 years agoConfigure: unbreak -S option now that -O is the default
Aaron Crane [Wed, 2 Dec 2015 00:06:42 +0000 (00:06 +0000)]
Configure: unbreak -S option now that -O is the default

As far as I can tell, using the -S and -O options together has always
yielded an error of this form:

    Configure: 2042: .: Can't open ./

That's because, even though is created in the UU directory, and
most of Configure is run in that directory, part of the -S implementation is
run in the root directory, and was therefore trying to read ./
instead of ./UU/

As of 41d73075f0801c26794dadb1ff690f305d7e53a7, the -O mode is always
enabled, so the -S option has been broken since then. This fixes that.

6 years agomove Win32's $^X code to where all other OSes' $^X code lives origin/tonyc/126753-dollar-caret-X
Daniel Dragan [Sat, 28 Nov 2015 05:29:17 +0000 (00:29 -0500)]
move Win32's $^X code to where all other OSes' $^X code lives

Back when the code in perllib.c was first added in 1999, in
commit 80252599d4 the large define tree function that today in 2015 is
Perl_set_caret_X was an unremarkable single statement

Over the years Perl_set_caret_X grew and grew with OS specific code. Move
the Win32 $^X code to match how all the other OSes do it. Fix a problem
where full perl's $^X is always absolute because perl5**.dll uses
GetModuleFileNameW in perllib.c, but miniperl's $^X is always a relative
path because it's coming from libc/command prompt/make tool/
Win32 miniperl's $^X being relative causes inefficiencies in EUMM as a
relative $^X is wrong the moment chdir executes in any perl process.
EUMM contains code to search PATH and some other places to guess/figure out
the absolute patch to the current perl to write the absolute perl path
into the makefile. By making $^X absolute on all Win32 perl build variants,
this find absolute perl path code won't execute in EUMM. It also harmonizes
behavior with other OSes and between Win32 mini and full perl. See details
in RT ticket for this patch.

6 years agoPerl_set_caret_X gv_fetch with GV_ADD can't return NULL
Daniel Dragan [Sat, 28 Nov 2015 03:29:49 +0000 (22:29 -0500)]
Perl_set_caret_X gv_fetch with GV_ADD can't return NULL

The GV will be created if it doesn't exist. Remove the branch for smaller
code size.

6 years agoPerl_magic_set(): remove unused var 's'
David Mitchell [Tue, 1 Dec 2015 15:28:37 +0000 (15:28 +0000)]
Perl_magic_set(): remove unused var 's'

This var is (mostly) unused, but is set in a couple of places, hence:

    mg.c:2657:17: warning: variable ‘s’ set but not used

In the one place it is used, declare it in a narrower scope.

6 years agohexfp: signbit() works on NVs (nv), not on long doubles (fv).
Jarkko Hietaniemi [Mon, 30 Nov 2015 12:27:47 +0000 (07:27 -0500)]
hexfp: signbit() works on NVs (nv), not on long doubles (fv).

The nv value should be a valid version of the fv value.

Why the fv is a long double, not a NV, is a long (haha) story.
Short version: the printf code expects to be able to work with long
doubles, if long doubles are available, even without -Duselongdouble.

The problem became obvious in VMS which has true 128-bit long
(little-endian) doubles, and trying the signbit() on those did
not work.

6 years agoop/rand.t: better test even spread of random nums
David Mitchell [Tue, 1 Dec 2015 12:32:34 +0000 (12:32 +0000)]
op/rand.t: better test even spread of random nums

The old test evaluated int(256*rand(1)) a large number of times, and
calculated the average number of bits seen in the result. If this was too
far from 4, it failed the (single) test. This is a rather crude test, and
generated what may be false negatives quite often in smoke tests.

This commit replaces that with a more comprehensive test scheme, but which
should cause a false negative in the test script only once every 2 million
runs, assuming a fair random number generator.

As before, it calculates 256*rand(1) many times, but maintains a count of
the number of occurrences of each result. Each count is then checked
whether it is within 6 sigmas of the expected value. For example for
100_000 iterations, we expect each count to be approximately 390, with a
6-sigma range of 272..509. If any count is outside that range, it fails
one of the 256 tests.

Thus this script now does 256 tests rather than a single one, so is a lot
better at detecting bad RNGs.

With each test being 6-sigma (1 in 500e6 failures) and 256 tests, that
gives us a false negative rate of approx 1 in every 2 million runs.

6 years agot/op/rand.t: modernise tests
David Mitchell [Mon, 30 Nov 2015 14:10:34 +0000 (14:10 +0000)]
t/op/rand.t: modernise tests

e.g. cmp_ok() rather than ok($x > 0), and give tests descriptions.

6 years agoremove flawed tests from t/op/rand.t
David Mitchell [Mon, 30 Nov 2015 13:51:30 +0000 (13:51 +0000)]
remove flawed tests from t/op/rand.t

There is a section of code supposedly intended to check that
d_randbits bits is sane. AFIKT, the code was flawed from the start,
and has just become more broken since.

Initially it ran rand(1) many times and recorded the min and max.
It then (in a convoluted way involving logarithms) checked that
$max wasn't greater than 1.

I suspect that this code was (at least at one point during its initial
writing) supposed to check that the number of bit of precision in rand()
matched d_randbits. If that was the case, then it certainly wasn't doing

Subsequently, extra bogus tests were added, e.g. that
    $max < (2 ** $randbits)
which it always will be, since it should be < 1.

Then the main test was inadvertently broken by a precedence issue
involving '!': I don't think this does what you think it does:

    unless (ok( !$max <= 0 or $max >= (2 ** $randbits)))

Then an extra check was added after each call to rand(1) in the loop that
the result was in the range 0..1. This check made all the other checks
that follow on $min and and $max superfluous.

So this commit removes all those extra tests, and changes a couple
of 'print #...\n"' into diag("..."), since we're now in the 21st century

6 years agoEliminate PerlIOMmap_close()
David Mitchell [Mon, 30 Nov 2015 12:02:10 +0000 (12:02 +0000)]
Eliminate PerlIOMmap_close()

This static function wasn't being used. For the justification, see

6 years agohexfp: printf %.13a 0.0
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:56:29 +0000 (22:56 -0500)]
hexfp: printf %.13a 0.0

6 years agohexfp: printf %.13a 1.0
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:22:25 +0000 (22:22 -0500)]
hexfp: printf %.13a 1.0

6 years agoperldelta for deprecation of code points > IV_MAX
Karl Williamson [Sun, 29 Nov 2015 05:28:17 +0000 (22:28 -0700)]
perldelta for deprecation of code points > IV_MAX

Commit 760c7c2f746ce3f3c3356b0a3efb017b6d0cb5b0 added this deprecation.

6 years agohexfp: printf %a for negative zero.
Jarkko Hietaniemi [Sat, 28 Nov 2015 22:45:19 +0000 (17:45 -0500)]
hexfp: printf %a for negative zero.

6 years agoutf8.c: White-space, comment typos only
Karl Williamson [Sat, 28 Nov 2015 19:13:00 +0000 (12:13 -0700)]
utf8.c: White-space, comment typos only

6 years agoDeprecate Unicode code points above IV_MAX
Karl Williamson [Sat, 28 Nov 2015 18:49:43 +0000 (11:49 -0700)]
Deprecate Unicode code points above IV_MAX


6 years agoperlapi: Account for EBCDIC extend UTF-8 range
Karl Williamson [Sat, 28 Nov 2015 18:54:44 +0000 (11:54 -0700)]
perlapi: Account for EBCDIC extend UTF-8 range

These pod changes were missed for
c0236afee0c5845d3823612c5cd34eccc4d29321, which also had a typo in its
commit message:  It should have said that the previous max was 2**31 -

6 years agoutf8.h: Remove use of redundant flags
Karl Williamson [Thu, 26 Nov 2015 05:35:53 +0000 (22:35 -0700)]
utf8.h: Remove use of redundant flags

The ABOVE_31_BIT flags is a proper subset of the SUPER flags, so if the
latter is set, we don't have to bother setting the former.  On the other
hand, there is no harm in doing so, these changes are all resolved at
compile time.  The reason I'm changing them is that it is easier to
explain in the pod what is happening, in the next commit.

6 years agoutf8.h: Add clearer #define synonyms
Karl Williamson [Thu, 26 Nov 2015 03:41:39 +0000 (20:41 -0700)]
utf8.h: Add clearer #define synonyms

These names have long caused me consternation, as they are named after
the internal ASCII-platform UTF-8 representation, which is not the same
for EBCDIC platforms, nor do they convey meaning to someone who isn't
currently steeped in the UTF-8 internals.  I've added synonyms that are
platform-independent in meaning and make more sense to someone coming at
this cold.  The old names are retained for back compat.

6 years agoreformat the FOOMARK macros slightly
David Mitchell [Sat, 28 Nov 2015 17:32:27 +0000 (17:32 +0000)]
reformat the FOOMARK macros slightly

whitespace-only changes

6 years agoFOOMARK debugging macros: fix %d cast; only -Dsv
David Mitchell [Sat, 28 Nov 2015 17:09:13 +0000 (17:09 +0000)]
FOOMARK debugging macros: fix %d cast; only -Dsv

The debugging variants of POPMARK() etc: use %IVdf rather than %d
to avoid compiler warnings when sizeof(IV) != sizeof(int);
also, make these macros trigger only under -Dsv rather than just -Ds
(-v is the verbose variant).

6 years agoBenchmark.t: better diagnostics
David Mitchell [Sat, 28 Nov 2015 16:44:12 +0000 (16:44 +0000)]
Benchmark.t: better diagnostics

use cmp_ok() instesd of ok() where apppriate and similar things to
get better diagnostucs when things fail (e.g. display what the bad value
was, rather than just letting you know it was bad).

Also, use diag() rather than 'print STDERR "# .....\n";'

6 years agoBenchmark.t/.pm: deal with short times
David Mitchell [Thu, 26 Nov 2015 15:41:01 +0000 (15:41 +0000)]
Benchmark.t/.pm: deal with short times

The number of iterations to do on various tests was set at 3 or 10
in the first incarnation of the test file 13 years ago, and hasn't
changed since. In the meantime, CPUs have gotten faster. So bump the
iteration count to 100. This makes no appreciable difference to total wall
time for the test file on my newish x86_64 platform, but will hopefully
make tests less likely to be running within the noise of  a single 100Hz
clock tick.

In particular, the NetBSD smokes were quite frequently failing tests 127
and 128, due to the CPU taken to do an empty loop being greater than that
for a full loop, thus leading to negative apparent execution time.  This
was likely to be due to the first taking "1" clock tick and the second
taking "0" ticks. Although this is less likely to happen now that the
iterations has been increased, this commit also adds a check to for a negative apparent execution time, and if detected,
prints a "too few iterations" warning and resets it to zero.

6 years agoBenchmark: move elapsed time calc into method
David Mitchell [Thu, 26 Nov 2015 13:51:29 +0000 (13:51 +0000)]
Benchmark: move elapsed time calc into method

A couple of places do basically the same set of summing various times()
fields within a Benchmark object, so make it into a private method.

6 years agoExtend UTF-EBCDIC to handle up to 2**64-1
Karl Williamson [Thu, 19 Nov 2015 04:28:14 +0000 (21:28 -0700)]
Extend UTF-EBCDIC to handle up to 2**64-1

This uses for UTF-EBCDIC essentially the same mechanism that Perl
already uses for UTF-8 on ASCII platforms to extend it beyond what might
be its natural maximum.  That is, when the UTF-8 start byte is 0xFF, it
adds a bunch more bytes to the character than it otherwise would,
bringing it to a total of 14 for UTF-EBCDIC.  This is enough to handle
any code point that fits in a 64 bit word.

The downside of this is that this extension is not compatible with
previous perls for the range 2**30 up through the previous max,
2**30 - 1.  A simple program could be written to convert files that were
written out using an older perl so that they can be read with newer
perls, and the perldelta says we will do this should anyone ask.
However, I strongly suspect that the number of such files in existence
is zero, as people in EBCDIC land don't seem to use Unicode much, and
these are very large code points, which are associated with a
portability warning every time they are output in some way.

This extension brings UTF-EBCDIC to parity with UTF-8, so that both can
cover a 64-bit word.  It allows some removal of special cases for EBCDIC
in core code and core tests.  And it is a necessary step to handle Perl
6's NFG, which I'd like eventually to bring to Perl 5.

This commit causes two implementations of a macro in utf8.h and
utfebcdic.h to become the same, and both are moved to a single one in
the portion of utf8.h common to both.

To illustrate, the I8 for U+3FFFFFFF (2**30-1) is
"\xFE\xBF\xBF\xBF\xBF\xBF\xBF" before and after this commit, but the I8
for the next code point, U+40000000 is now
and before this commit it was "\xFF\xA0\xA0\xA0\xA0\xA0\xA0".

The I8 for 2**64-1 (U+FFFFFFFFFFFFFFFF) is
"\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF", whereas
before this commit it was unrepresentable.

Commit 7c560c3beefbb9946463c9f7b946a13f02f319d8 said in its message that
it was moving something that hadn't been needed on EBCDIC until the
"next commit".  That statement turned out to be wrong, overtaken by
events.  This now is the commit it was referring to.
commit I prematurely
pushed that

6 years agotoke.c: Remove soon-to-be invalid t assumption
Karl Williamson [Mon, 23 Nov 2015 22:00:55 +0000 (15:00 -0700)]
toke.c: Remove soon-to-be invalid t assumption

The code in toke.c assumes that the UTF8 expansion of the string
"\x{foo}" takes no more bytes than the original input text, which
includes the 4 bytes of overhead "\x{}".  Similarly for "\o{}".  The
functions that convert to the code point actually now assert for this.
The next commit will make this assumption definitely invalid on EBCDIC
platforms.  Remove the assertions, and actually handle the case
properly.  The other places that call the conversion functions do not
make this assumption, so there is no harm in removing them from there.

Since we believe that this can't happen except on EBCDIC, we
could #ifdef this code and use just an assert on non-EBCDIC.  But it's
easier to maintain if #ifdef's are minimized.  Parsing is not a
time-critical operation, like being in an inner loop, and the extra test
gives a branch prediction hint to the compiler.

6 years agoext/XS-APItest/t/utf8.t: Change variable names for clarity
Karl Williamson [Wed, 25 Nov 2015 18:35:51 +0000 (11:35 -0700)]
ext/XS-APItest/t/utf8.t: Change variable names for clarity

These variables are misnamed, based on the internal Perl UTF-8
representation for ASCII platforms, which is not applicable for
UTF-EBCDIC.  Rename them to something that applies to both platforms,
and lowers confusion.

6 years agoOutput appropriately dire warning for high code points
Karl Williamson [Tue, 10 Nov 2015 00:00:53 +0000 (17:00 -0700)]
Output appropriately dire warning for high code points

Code points above 2**31-1 have never been in any standard, so their use
is non-portable.  There has been a more dire warning raised at times
when decoding UTF-8 into a UV, but it wasn't getting output always when
it was appropriate.  Going the other way, into UTF-8, there was only one
type of warning output.  This commit splits that into the more dire for
higher code points.

6 years agoext/XS-APItest: Add tests for uvchr_to_utf8()
Karl Williamson [Tue, 10 Nov 2015 02:41:05 +0000 (19:41 -0700)]
ext/XS-APItest: Add tests for uvchr_to_utf8()

There are some TODOs added that these tests uncovered, which will be
fixed in the next commit.

6 years agoFix uvoffuni_to_utf8_flags() disallowed input
Karl Williamson [Wed, 11 Nov 2015 19:12:52 +0000 (12:12 -0700)]
Fix uvoffuni_to_utf8_flags() disallowed input

This function has the capability to refuse to accept problematic code
points, such as surrogates.  It accepted them anyway if the warnings
category wasn't enabled.  Tests for this will be introduced in the next

6 years agoXS-APItest/utf8.t: Add a bunch more tests
Karl Williamson [Tue, 10 Nov 2015 02:40:41 +0000 (19:40 -0700)]
XS-APItest/utf8.t: Add a bunch more tests

This adds more extensive testing, and rearranges things so that the
the more fundamental tests are done earlier.  Boundary cases are
especially added.  It removes many of the EBCDIC skips.  Debug
information is output now to STDERR so that test_harness displays it,
and more gets output upon failure.  Two TODO tests were added as a
result of this catching some existing problems that hadn't been tested
for previously.

6 years agoregcomp.c: White-space only
Karl Williamson [Tue, 24 Nov 2015 21:14:14 +0000 (14:14 -0700)]
regcomp.c: White-space only

This does vertical alignment to make things clearer

6 years agoregen/ Output tables in hex
Karl Williamson [Fri, 13 Nov 2015 19:42:22 +0000 (12:42 -0700)]
regen/ Output tables in hex

When dealing with code points, it is easier to use the hex values.  This
outputs the tables in hex, squeezing them so they barely fit in an 80
column window.  That they didn't use to so fit was why they were not
output in hex prior to this commit.

The UTF8SKIP table is continued to be output in decimal, as the values
aren't code points.

6 years agoPerl_newATTRSUB_x: cast a bool arg
David Mitchell [Wed, 25 Nov 2015 15:58:20 +0000 (15:58 +0000)]
Perl_newATTRSUB_x: cast a bool arg

S_op_const_sv() expects a bool arg, so cast accordingly.
(Otherwise if the flag bit is > bit 7, it could get truncated to 0)

6 years agoBenchmark.t: add more diag output
David Mitchell [Wed, 25 Nov 2015 15:36:26 +0000 (15:36 +0000)]
Benchmark.t: add more diag output

2 tests in a particular block of code are consistently failing on a newbsd

Make a copy of that block of code but with the result object and
chart object generated separately, then diag dump both if any of the
tests in that new block fail, so we can see better what's going wrong.

6 years agoBenchmark.t: fix marginal tests
David Mitchell [Wed, 25 Nov 2015 11:18:38 +0000 (11:18 +0000)]
Benchmark.t: fix marginal tests

Two tests fail a lot of smokes; those tests assert that two
code variants when one is faster than the other should show a percentage
difference > 0. Then the differences are slight, the percentage may round
down to zero and the test will fail. Reduce the likelihood of this my
making one code variant a lot slower than the other

6 years agofix an else nesting error from the last set of DynaLoader patches
Tony Cook [Wed, 25 Nov 2015 05:39:16 +0000 (16:39 +1100)]
fix an else nesting error from the last set of DynaLoader patches

6 years agoSDBM_File: specify the prototyping behaviour
David Mitchell [Tue, 24 Nov 2015 16:57:50 +0000 (16:57 +0000)]
SDBM_File: specify the prototyping behaviour

This commit just adds 'PROTOTYPES: DISABLE' which is the default
anyway(*), but it stops this annoying warning on stderr:

    Please specify prototyping behavior for SDBM_File.xs (see perlxs manual)

(*) perlxs.pod implies that the default is enabled, but this doesn't
appear to be the case

6 years agoupdate for new Module-Metadata
David Mitchell [Tue, 24 Nov 2015 15:39:49 +0000 (15:39 +0000)]
update for new Module-Metadata

6 years agoUpdate Module-Metadata to version 1.000031
Karen Etheridge [Tue, 24 Nov 2015 04:01:01 +0000 (20:01 -0800)]
Update Module-Metadata to version 1.000031

1.000031  2015-11-24 03:57:55Z (TRIAL RELEASE)
  - be less noisy on failure when building as part of perl core (see perl

6 years agoExtUtils::CBuilder: silence noisy test
David Mitchell [Tue, 24 Nov 2015 15:21:43 +0000 (15:21 +0000)]
ExtUtils::CBuilder: silence noisy test

00-have-compiler.t deliberately does something that tries to fork and
exec a non-existent file.

Stop spurious 'Can't exec "djaadjfkadjkfajdf"' appearing on stderr
by temporaily closing it before running the relevant tests.

6 years agoshared.xs: remove dead code
David Mitchell [Tue, 24 Nov 2015 12:56:18 +0000 (12:56 +0000)]
shared.xs: remove dead code

Since v5.23.4-26-g0b057af made static a bunch a functions not used
outside their own src files, gcc has been complaining:

    shared.xs:1172:1: warning: ‘Perl_sharedsv_unlock’ defined but not used [-Wunused-function]
     Perl_sharedsv_unlock(pTHX_ SV *ssv)

So "delete" this function using '#if 0'

6 years agoOpcode.xs: silence compiler warning
David Mitchell [Tue, 24 Nov 2015 12:38:15 +0000 (12:38 +0000)]
Opcode.xs: silence compiler warning

Opcode.xs: In function ‘opmask_addlocal’:
../../perl.h:6473:12: warning: unused variable ‘my_cxtp’ [-Wunused-variable]
  my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX]

Without debugging enabled, opcode_debug becomes a constant, so
dMY_CXT isn't needed in opmask_addlocal().

Make the enabling of debugging based on a macro (OPCODE_DEBUG)
rather then on '#if 0', then use that accordingly.

6 years ago[perl #126443] make sure PL_oldbufptr is preserved in scan_heredoc()
Tony Cook [Tue, 24 Nov 2015 03:52:31 +0000 (14:52 +1100)]
[perl #126443] make sure PL_oldbufptr is preserved in scan_heredoc()

This is later used to update PL_oldoldbufptr, if the token following
the <<FOO is unexpected this causes S_no_op() to access an invalid

6 years ago[perl #126480] pipe() doesn't need the assertions
Tony Cook [Tue, 24 Nov 2015 03:37:35 +0000 (14:37 +1100)]
[perl #126480] pipe() doesn't need the assertions

GvIOn() already performs the checks and produces a nice error message,
and similar functions, such as open() and socket(), don't have
assertions on this condition.

6 years ago[perl #126635] don't shortcut when SVf_IVisUV is set
Tony Cook [Wed, 18 Nov 2015 23:04:25 +0000 (10:04 +1100)]
[perl #126635] don't shortcut when SVf_IVisUV is set

Most integers are small, so in most cases it won't be set.

The other option would be to always clear it, but that increases the
amount of inline code for a rare case.

6 years avoid noise on STDERR.
David Mitchell [Mon, 23 Nov 2015 17:32:01 +0000 (17:32 +0000)] avoid noise on STDERR.

If a TODO test fails, the diagnostic output should go to STDOUT rather
than STDERR.

This was originally

but since Test has been moved from cpan/ to dist/, it can be applied

6 years agoPorting/ - Fix ExtUtils::Constant
Steve Hay [Mon, 23 Nov 2015 17:41:20 +0000 (17:41 +0000)]
Porting/ - Fix ExtUtils::Constant

Now the CUSTOMIZED file appears in customized.dat

6 years agoSilence warnings in encoding::warnings
David Mitchell [Mon, 23 Nov 2015 17:11:15 +0000 (17:11 +0000)]
Silence warnings in encoding::warnings

This is Karl's patch from

which can be applied locally now that encoding::warnings has moved from
cpan/ to dist/.

6 years agomove encoding-warnings from cpan/ to dist/
David Mitchell [Mon, 23 Nov 2015 17:07:44 +0000 (17:07 +0000)]
move encoding-warnings from cpan/ to dist/

A private communication with Audrey indicated that to allow us to make
mods, this was the preferred solution.

6 years update ExtUtils::Constant status
David Mitchell [Mon, 23 Nov 2015 16:38:55 +0000 (16:38 +0000)] update ExtUtils::Constant status

It used to indicate that the blead version had diverged dramatically from
the 0.16 CPAN version. Since then a 0.23 has been released on CPAN which
mostly matches blead - blead has one test file locally modified.

NB: I ran "t/porting/customized.t --regen" and for some reason it
didn't think that customized.dat needed updating.

6 years agoperlfunc: specify valid inputs precisely [perl #126437]
Aristotle Pagaltzis [Mon, 23 Nov 2015 14:31:32 +0000 (15:31 +0100)]
perlfunc: specify valid inputs precisely [perl #126437]

6 years agoMerge branch 'clang-thread-safety-analysis' into blead
Jarkko Hietaniemi [Mon, 23 Nov 2015 13:10:44 +0000 (08:10 -0500)]
Merge branch 'clang-thread-safety-analysis' into blead

clang thread safety analysis

6 years agobump threads version
Jarkko Hietaniemi [Fri, 20 Nov 2015 17:27:32 +0000 (12:27 -0500)]
bump threads version

6 years agoanalysis cannot tell that the mutex was locked
Jarkko Hietaniemi [Thu, 19 Nov 2015 02:25:04 +0000 (21:25 -0500)]
analysis cannot tell that the mutex was locked

It was locked in S_ithread_create() - in case it returned a non-NULL thread.
Because of this conditionality the S_ithread_create() cannot be annotated.

threads.xs:1161:9: warning: releasing mutex 'thread->mutex' that was not held [-Wthread-safety-analysis]

6 years agoanalysis does not like mutex being either held or released
Jarkko Hietaniemi [Thu, 19 Nov 2015 02:18:37 +0000 (21:18 -0500)]
analysis does not like mutex being either held or released

threads.xs:1020:1: warning: mutex 'thread->mutex' is not held on every path through here [-Wthread-safety-analysis]

6 years agoclang specific diagnostics ignore/restore
Jarkko Hietaniemi [Sat, 21 Nov 2015 02:40:00 +0000 (21:40 -0500)]
clang specific diagnostics ignore/restore

6 years agoannotate S_ithread_create create_destruct_mutex use
Jarkko Hietaniemi [Wed, 18 Nov 2015 03:15:09 +0000 (22:15 -0500)]
annotate S_ithread_create create_destruct_mutex use

If the pool is passed in, and the create_destruct_mutex unlocked also
on success (so that all the unlocks happen in S_ithread_create()),
the create_destruct_mutex use can be annotated.

threads.xs:757:9: warning: releasing mutex 'my_poolp->create_destruct_mutex' th
at was not held [-Wthread-safety-analysis]

threads.xs:1000:9: warning: releasing mutex 'my_poolp->create_destruct_mutex' t
hat was not held [-Wthread-safety-analysis]

threads.c:1319:1: warning: mutex 'my_poolp->create_destruct_mutex' is not held on every path through here [-Wthread-safety-analysis]

6 years agoannotate S_ithread_count_inc mutex use
Jarkko Hietaniemi [Sat, 14 Nov 2015 14:09:38 +0000 (09:09 -0500)]
annotate S_ithread_count_inc mutex use

No warnings issued, but a clear case for annotations.

6 years agoannotate S_ithread_free mutex use
Jarkko Hietaniemi [Fri, 6 Nov 2015 00:13:22 +0000 (19:13 -0500)]
annotate S_ithread_free mutex use

threads.xs:276:13: warning: releasing mutex 'thread->mutex' that was not held [-Wthread-safety-analysis]

threads.xs:282:5: warning: releasing mutex 'thread->mutex' that was not held [-Wthread-safety-analysis]

threads.xs:394:1: warning: mutex 'thread->mutex' is still held at the end of
      function [-Wthread-safety-analysis]

threads.xs:677:1: warning: mutex 'thread->mutex' is still held at the end of
      function [-Wthread-safety-analysis]

6 years agosplit off the $0 setting so mutex use can be annotated
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:15:35 +0000 (18:15 -0500)]
split off the $0 setting so mutex use can be annotated

No warnings were emitted since the use of the PL_dollarzero_mutex
was correctly bracketed by mutex lock and unlock, but by splitting
off the code and annotating it is more likely to stay correct.

6 years agocleanup the mutex use of PerlIOStdio_close
Jarkko Hietaniemi [Fri, 6 Nov 2015 00:00:01 +0000 (19:00 -0500)]
cleanup the mutex use of PerlIOStdio_close

Before: clang -Wthread-safety found the flow quite suspect:
one conditional mutex lock, with two conditional unlocks.
The code *looked* like the being okay logic-wise now, but
rather fragile, so let's make it clearer and more solid
by hoisting the locking earlier.

This is a fd close, this should not be a performance sensitive spot.

And it's in PerlIOStdio, so it should be pretty dead anyway.

perlio.c:3283:18: warning: mutex 'PL_perlio_mutex' is not held on every path through here [-Wthread-safety-analysis]
        result = PerlSIO_fclose(stdio);

perlio.c:3299:6: warning: releasing mutex 'PL_perlio_mutex' that was not held [-Wthread-safety-analysis]

6 years agoannotate the mutex use of S_more_refcounted_fds
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:58:56 +0000 (18:58 -0500)]
annotate the mutex use of S_more_refcounted_fds

perlio.c:2232:2: warning: releasing mutex 'PL_perlio_mutex' that was not held [-Wthread-safety-analysis]

6 years agoannotate the mutex use of atfork_lock and atfork_unlock
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:57:58 +0000 (18:57 -0500)]
annotate the mutex use of atfork_lock and atfork_unlock

util.c:2729:1: warning: mutex 'PL_perlio_mutex' is still held at the end of function [-Wthread-safety-analysis]

util.c:2729:1: warning: mutex 'PL_op_mutex' is still held at the end of function [-Wthread-safety-analysis]

util.c:2739:5: warning: releasing mutex 'PL_perlio_mutex' that was not held [-Wthread-safety-analysis]

util.c:2744:5: warning: releasing mutex 'PL_op_mutex' that was not held [-Wthread-safety-analysis]

6 years agoannotate the acquire/release of PL_op_mutex
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:57:17 +0000 (18:57 -0500)]
annotate the acquire/release of PL_op_mutex

op.c:1190:1: warning: mutex 'PL_op_mutex' is still held at the end of function

op.c:1199:5: warning: releasing mutex 'PL_op_mutex' that was not held

6 years agoadd -Wthread-safety for clang 3.5 or later
Jarkko Hietaniemi [Sun, 22 Nov 2015 16:40:36 +0000 (11:40 -0500)]
add -Wthread-safety for clang 3.5 or later

With this change there is no need to explicitly e.g.
Configure ... -Accflags='-Wthread-safety'
since doing just -Dusethreads with recent enough clang
will automatically add the -Wthread-safety

6 years agoclang thread safety annotations
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:52:20 +0000 (18:52 -0500)]
clang thread safety annotations

Static (compile-time) annotations for declaring the multithreaded
behavior of functions, variables, and capabilities (like mutexes).
Available since about clang 3.5.

./Configure -des -Dusedevel -Dusethreads -Dcc=clang -Accflags='-Wthread-safety'

clang -Wthread-safety then checks the validity of the annotations.