5 hours agoPerl_magic_set(): remove unused var 's' blead
David Mitchell [Tue, 1 Dec 2015 15:28:37 +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.

7 hours agohexfp: signbit() works on NVs (nv), not on long doubles (fv).
Jarkko Hietaniemi [Mon, 30 Nov 2015 12:27:47 +0000]
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.

9 hours agoop/rand.t: better test even spread of random nums
David Mitchell [Tue, 1 Dec 2015 12:32:34 +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.

31 hours agot/op/rand.t: modernise tests
David Mitchell [Mon, 30 Nov 2015 14:10:34 +0000]
t/op/rand.t: modernise tests

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

32 hours agoremove flawed tests from t/op/rand.t
David Mitchell [Mon, 30 Nov 2015 13:51:30 +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

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

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


2 days agohexfp: printf %.13a 0.0
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:56:29 +0000]
hexfp: printf %.13a 0.0

2 days agohexfp: printf %.13a 1.0
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:22:25 +0000]
hexfp: printf %.13a 1.0

2 days agoperldelta for deprecation of code points > IV_MAX
Karl Williamson [Sun, 29 Nov 2015 05:28:17 +0000]
perldelta for deprecation of code points > IV_MAX

Commit 760c7c2f746ce3f3c3356b0a3efb017b6d0cb5b0 added this deprecation.

2 days agohexfp: printf %a for negative zero.
Jarkko Hietaniemi [Sat, 28 Nov 2015 22:45:19 +0000]
hexfp: printf %a for negative zero.

2 days agoutf8.c: White-space, comment typos only
Karl Williamson [Sat, 28 Nov 2015 19:13:00 +0000]
utf8.c: White-space, comment typos only

2 days agoDeprecate Unicode code points above IV_MAX
Karl Williamson [Sat, 28 Nov 2015 18:49:43 +0000]
Deprecate Unicode code points above IV_MAX

See https://rt.perl.org/Ticket/Display.html?id=115166

2 days agoperlapi: Account for EBCDIC extend UTF-8 range
Karl Williamson [Sat, 28 Nov 2015 18:54:44 +0000]
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 -

2 days agoutf8.h: Remove use of redundant flags
Karl Williamson [Thu, 26 Nov 2015 05:35:53 +0000]
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.

2 days agoutf8.h: Add clearer #define synonyms
Karl Williamson [Thu, 26 Nov 2015 03:41:39 +0000]
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.

3 days agoreformat the FOOMARK macros slightly
David Mitchell [Sat, 28 Nov 2015 17:32:27 +0000]
reformat the FOOMARK macros slightly

whitespace-only changes

3 days agoFOOMARK debugging macros: fix %d cast; only -Dsv
David Mitchell [Sat, 28 Nov 2015 17:09:13 +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).

3 days agoBenchmark.t: better diagnostics
David Mitchell [Sat, 28 Nov 2015 16:44:12 +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";'

5 days agoBenchmark.t/.pm: deal with short times
David Mitchell [Thu, 26 Nov 2015 15:41:01 +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
Benchmark.pm for a negative apparent execution time, and if detected,
prints a "too few iterations" warning and resets it to zero.

5 days agoBenchmark: move elapsed time calc into method
David Mitchell [Thu, 26 Nov 2015 13:51:29 +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.

5 days agoExtend UTF-EBCDIC to handle up to 2**64-1
Karl Williamson [Thu, 19 Nov 2015 04:28:14 +0000]
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

5 days agotoke.c: Remove soon-to-be invalid t assumption
Karl Williamson [Mon, 23 Nov 2015 22:00:55 +0000]
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.

5 days agoext/XS-APItest/t/utf8.t: Change variable names for clarity
Karl Williamson [Wed, 25 Nov 2015 18:35:51 +0000]
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.

5 days agoOutput appropriately dire warning for high code points
Karl Williamson [Tue, 10 Nov 2015 00:00:53 +0000]
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.

5 days agoext/XS-APItest: Add tests for uvchr_to_utf8()
Karl Williamson [Tue, 10 Nov 2015 02:41:05 +0000]
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.

5 days agoFix uvoffuni_to_utf8_flags() disallowed input
Karl Williamson [Wed, 11 Nov 2015 19:12:52 +0000]
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

5 days agoXS-APItest/utf8.t: Add a bunch more tests
Karl Williamson [Tue, 10 Nov 2015 02:40:41 +0000]
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.

5 days agoregcomp.c: White-space only
Karl Williamson [Tue, 24 Nov 2015 21:14:14 +0000]
regcomp.c: White-space only

This does vertical alignment to make things clearer

5 days agoregen/ebcdic.pl: Output tables in hex
Karl Williamson [Fri, 13 Nov 2015 19:42:22 +0000]
regen/ebcdic.pl: 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 days agoPerl_newATTRSUB_x: cast a bool arg
David Mitchell [Wed, 25 Nov 2015 15:58:20 +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 days agoBenchmark.t: add more diag output
David Mitchell [Wed, 25 Nov 2015 15:36:26 +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 days agoBenchmark.t: fix marginal tests
David Mitchell [Wed, 25 Nov 2015 11:18:38 +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 days agofix an else nesting error from the last set of DynaLoader patches
Tony Cook [Wed, 25 Nov 2015 05:39:16 +0000]
fix an else nesting error from the last set of DynaLoader patches

7 days agoSDBM_File: specify the prototyping behaviour
David Mitchell [Tue, 24 Nov 2015 16:57:50 +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

7 days agoupdate Maintainers.pl for new Module-Metadata
David Mitchell [Tue, 24 Nov 2015 15:39:49 +0000]
update Maintainers.pl for new Module-Metadata

7 days agoUpdate Module-Metadata to version 1.000031
Karen Etheridge [Tue, 24 Nov 2015 04:01:01 +0000]
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

7 days agoExtUtils::CBuilder: silence noisy test
David Mitchell [Tue, 24 Nov 2015 15:21:43 +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.

7 days agoshared.xs: remove dead code
David Mitchell [Tue, 24 Nov 2015 12:56:18 +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'

7 days agoOpcode.xs: silence compiler warning
David Mitchell [Tue, 24 Nov 2015 12:38:15 +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.

7 days ago[perl #126443] make sure PL_oldbufptr is preserved in scan_heredoc()
Tony Cook [Tue, 24 Nov 2015 03:52:31 +0000]
[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

7 days ago[perl #126480] pipe() doesn't need the assertions
Tony Cook [Tue, 24 Nov 2015 03:37:35 +0000]
[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.

7 days ago[perl #126635] don't shortcut when SVf_IVisUV is set
Tony Cook [Wed, 18 Nov 2015 23:04:25 +0000]
[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.

8 days agoTest.pm: avoid noise on STDERR.
David Mitchell [Mon, 23 Nov 2015 17:32:01 +0000]
Test.pm: 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

8 days agoPorting/Maintainers.pl - Fix ExtUtils::Constant
Steve Hay [Mon, 23 Nov 2015 17:41:20 +0000]
Porting/Maintainers.pl - Fix ExtUtils::Constant

Now the CUSTOMIZED file appears in customized.dat

8 days agoSilence warnings in encoding::warnings
David Mitchell [Mon, 23 Nov 2015 17:11:15 +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/.

8 days agomove encoding-warnings from cpan/ to dist/
David Mitchell [Mon, 23 Nov 2015 17:07:44 +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.

8 days agoMaintainers.pl: update ExtUtils::Constant status
David Mitchell [Mon, 23 Nov 2015 16:38:55 +0000]
Maintainers.pl: 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.

8 days agoperlfunc: specify valid inputs precisely [perl #126437]
Aristotle Pagaltzis [Mon, 23 Nov 2015 14:31:32 +0000]
perlfunc: specify valid inputs precisely [perl #126437]

8 days agoMerge branch 'clang-thread-safety-analysis' into blead
Jarkko Hietaniemi [Mon, 23 Nov 2015 13:10:44 +0000]
Merge branch 'clang-thread-safety-analysis' into blead

clang thread safety analysis

8 days agobump threads version
Jarkko Hietaniemi [Fri, 20 Nov 2015 17:27:32 +0000]
bump threads version

8 days agoanalysis cannot tell that the mutex was locked
Jarkko Hietaniemi [Thu, 19 Nov 2015 02:25:04 +0000]
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]

8 days agoanalysis does not like mutex being either held or released
Jarkko Hietaniemi [Thu, 19 Nov 2015 02:18:37 +0000]
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]

8 days agoclang specific diagnostics ignore/restore
Jarkko Hietaniemi [Sat, 21 Nov 2015 02:40:00 +0000]
clang specific diagnostics ignore/restore

8 days agoannotate S_ithread_create create_destruct_mutex use
Jarkko Hietaniemi [Wed, 18 Nov 2015 03:15:09 +0000]
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]

8 days agoannotate S_ithread_count_inc mutex use
Jarkko Hietaniemi [Sat, 14 Nov 2015 14:09:38 +0000]
annotate S_ithread_count_inc mutex use

No warnings issued, but a clear case for annotations.

8 days agoannotate S_ithread_free mutex use
Jarkko Hietaniemi [Fri, 6 Nov 2015 00:13:22 +0000]
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]

8 days agosplit off the $0 setting so mutex use can be annotated
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:15:35 +0000]
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.

8 days agocleanup the mutex use of PerlIOStdio_close
Jarkko Hietaniemi [Fri, 6 Nov 2015 00:00:01 +0000]
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]

8 days agoannotate the mutex use of S_more_refcounted_fds
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:58:56 +0000]
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]

8 days agoannotate the mutex use of atfork_lock and atfork_unlock
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:57:58 +0000]
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]

8 days agoannotate the acquire/release of PL_op_mutex
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:57:17 +0000]
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

8 days agoadd -Wthread-safety for clang 3.5 or later
Jarkko Hietaniemi [Sun, 22 Nov 2015 16:40:36 +0000]
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

8 days agoclang thread safety annotations
Jarkko Hietaniemi [Thu, 5 Nov 2015 23:52:20 +0000]
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.

8 days agoassertion failure on foo(my $x : bar)
David Mitchell [Mon, 23 Nov 2015 08:15:40 +0000]
assertion failure on foo(my $x : bar)

RT #126257

'my var : attr' injects a void-context sub call just after the
pad op. However, Perl_ck_entersub_args_list() tries to impose lvalue
context on each of its args, which causes an assertion failure.

This commit makes Perl_ck_entersub_args_list() skip calling op_lvalue()
on any args which are OP_ENTERSUB/OPf_WANT_VOID. Strictly
speaking it should check that the sub call is actually an attribute
method call (e.g. first child is a const("attibutes") etc), but this
was far too much like hard work.

8 days agoTODO newish re/speed.t tests on VMS.
Craig A. Berry [Sun, 22 Nov 2015 23:02:55 +0000]
TODO newish re/speed.t tests on VMS.

The tests that dump regex debug info get their output mangled by the
record-oriented pipes but otherwise look fine.  So mark them to-do.

8 days agomake_ext.pl: fix operator precedence error from b4c079ca5
Tony Cook [Sun, 22 Nov 2015 23:37:47 +0000]
make_ext.pl: fix operator precedence error from b4c079ca5

10 days agobase: fix a mis-statement in Changes file
Ricardo Signes [Sat, 21 Nov 2015 21:31:31 +0000]
base: fix a mis-statement in Changes file

10 days agorelease schedule: use a verbatim block for a list-y paragraph
Ricardo Signes [Sat, 21 Nov 2015 20:01:09 +0000]
release schedule: use a verbatim block for a list-y paragraph

10 days agoGet re/uniprops.t to pass on minitest
Karl Williamson [Sat, 21 Nov 2015 19:20:32 +0000]
Get re/uniprops.t to pass on minitest

locale handling doesn't work without POSIX module being able to load, so
doesn't work on minitest.  Prior to this patch, the code checked for
only one case of locale handling to skip when there was no POSIX, but
there was a 2nd case if failed to detect.

10 days agobase: new CPAN release
Ricardo Signes [Sat, 21 Nov 2015 18:16:47 +0000]
base: new CPAN release

10 days agoTick!
Abigail [Sat, 21 Nov 2015 16:55:07 +0000]

10 days agoHash-Util-FieldHash version bump.
Jarkko Hietaniemi [Fri, 20 Nov 2015 21:53:26 +0000]
Hash-Util-FieldHash version bump.

10 days agoHUF_get_trigger0 unused since at least d74d639b
Jarkko Hietaniemi [Fri, 20 Nov 2015 21:43:19 +0000]
HUF_get_trigger0 unused since at least d74d639b

The 0b057af7 exposed this by static-ing it, so that compilers
started warning about the unused static function.

10 days ago[perl #116677] always deparse <> as either glob or readline
Lukas Mai [Sat, 21 Nov 2015 00:15:24 +0000]
[perl #116677] always deparse <> as either glob or readline

10 days ago[perl #124280] don't warn for 'my $foo, *bar'
Lukas Mai [Fri, 20 Nov 2015 23:16:31 +0000]
[perl #124280] don't warn for 'my $foo, *bar'

It doesn't make sense to warn 'Parentheses missing around "my" list' if
adding the parens causes a syntax error (you can't declare typeglobs).

But it does make sense to warn for 'local $foo, *bar' because typeglobs
can be localized.

Thus modify the heuristic to only warn for '*' if we're not lexically
declaring something.

11 days agoBump the perl version in various places for 5.23.6
Abigail [Fri, 20 Nov 2015 19:15:14 +0000]
Bump the perl version in various places for 5.23.6

11 days agoNew perldelta for 5.23.6
Abigail [Fri, 20 Nov 2015 18:00:09 +0000]
New perldelta for 5.23.6

11 days agoVarious tests: use centralized locale detection
Karl Williamson [Wed, 21 Oct 2015 03:40:36 +0000]
Various tests: use centralized locale detection

These tests were using individually defined heuristics to decide whether
to do locale testing or not.  However t/loc_tools.pl provides functions
that are more reliable and complete for determining this than the
hand-rolled ones in these tests.

11 days agolib/locale.pm: Fix so works on platforms without LC_CTYPE
Karl Williamson [Fri, 20 Nov 2015 02:57:11 +0000]
lib/locale.pm: Fix so works on platforms without LC_CTYPE

These may not actually exist in the wild, but it is better to be

This also adds an XXX comment about future possibilities.

11 days agot/loc_tools.pl: Improve locale detection
Karl Williamson [Fri, 20 Nov 2015 02:53:27 +0000]
t/loc_tools.pl: Improve locale detection

This would return FALSE if the platform didn't have LC_CTYPE; it really
should test if the desired locale category is available, and return TRUE
if so, regardless of LC_CTYPE's presence.  Now it may be that all
platforms that have locales have LC_CTYPE, but it is better to not make
that assumption.

It also centralizes the tests for basic locale handling into one common
function called by the others.

11 days agot/loc_tools.pl: Fix incomplete description in comment
Karl Williamson [Fri, 20 Nov 2015 02:51:53 +0000]
t/loc_tools.pl: Fix incomplete description in comment

11 days agot/loc_tools.pl: White-space only
Karl Williamson [Fri, 30 Oct 2015 16:14:08 +0000]
t/loc_tools.pl: White-space only

11 days agoop.c: Fix typo in comment
Karl Williamson [Fri, 20 Nov 2015 17:10:31 +0000]
op.c: Fix typo in comment

This was very recently introduced, by

11 days agoAdded epigraph for 5.23.5
Abigail [Fri, 20 Nov 2015 17:27:31 +0000]
Added epigraph for 5.23.5

11 days agoMerge branch 'release-5.23.5' into blead
Abigail [Fri, 20 Nov 2015 17:15:03 +0000]
Merge branch 'release-5.23.5' into blead

11 days agoperldelta: acknowledgements v5.23.5
Abigail [Fri, 20 Nov 2015 13:40:19 +0000]
perldelta: acknowledgements

11 days agoperlhist: added entry for 5.23.5
Abigail [Fri, 20 Nov 2015 13:35:01 +0000]
perlhist: added entry for 5.23.5

11 days agoperldelta: Modules and Pragmata
Abigail [Fri, 20 Nov 2015 13:29:33 +0000]
perldelta: Modules and Pragmata

11 days agohexfp: if HEXFP_NV the shift2 is unused
Jarkko Hietaniemi [Fri, 20 Nov 2015 01:47:49 +0000]
hexfp: if HEXFP_NV the shift2 is unused

HEXFP_NV happens with e.g. -Duselongdouble.  The unusedness is
warned about by e.g. gcc/g++ at least since 4.6, but seemingly
not by clang, even at 3.7.

11 days agoUpdate Module::CoreList for 5.23.5
Abigail [Fri, 20 Nov 2015 10:34:11 +0000]
Update Module::CoreList for 5.23.5

11 days agoUpdate Porting/Maintainers.pl for previous commit
Steve Hay [Fri, 20 Nov 2015 08:16:28 +0000]
Update Porting/Maintainers.pl for previous commit

(Customization is incorporated into the new CPAN release.)

11 days agoUpdate Module-Metadata to version 1.000030
Karen Etheridge [Fri, 20 Nov 2015 03:15:18 +0000]
Update Module-Metadata to version 1.000030

1.000030  2015-11-20 03:03:24Z (TRIAL RELEASE)
  - temp dirs cleaned up during tests (Steve Hay)
  - more accurately mark tests as TODO, so as to have a quieter and less
    confusing test run without passing TODO tests. This release is primarily
    intended for the perl 5.23.5 release.

12 days agopod/perldelta: Add punctuation
Abigail [Thu, 19 Nov 2015 18:14:35 +0000]
pod/perldelta: Add punctuation

12 days agoop_free(): don't assert op_private ok when erred
David Mitchell [Thu, 19 Nov 2015 15:49:03 +0000]
op_free(): don't assert op_private ok when erred

[perl #126258]

op_free includes an assert to make sure each op's op_private field
only has the flags set that are expected for that op. It's a thing I added
at the same time I added the regen/op_private mechanism, and is more a
general "make sure people are only setting the flags we know about" test.

However, if the op tree is being freed after a compilation error, some
op's flags may be in an inconsistent state; so skip the assert in that case.


    perl -e 'grep$0,0}'

12 days agoTurn new diag message into a link.
Abigail [Thu, 19 Nov 2015 15:46:45 +0000]
Turn new diag message into a link.

This turned out to be a bit of work. When running the porting tests,
the pod checker checks whether all links are valid. To do so, it
creates a database of all valid targets, and then for all links,
checks whether the target exist. However, the targets have been POD
processed, while the links have not -- except for E<sol> and
E<verbar>. So, if the target contains S<>, the link *must not*.

12 days agopodcheck.t: Deindent by 1 space to left margin.
Abigail [Thu, 19 Nov 2015 12:32:00 +0000]
podcheck.t: Deindent by 1 space to left margin.

12 days agopodcheck.t: Line up comments.
Abigail [Thu, 19 Nov 2015 12:28:57 +0000]
podcheck.t: Line up comments.

A block with all comments lined up, save for one? That hurts the eyes.

12 days agopodcheck.t: Fix typos in comments
Abigail [Thu, 19 Nov 2015 12:28:35 +0000]
podcheck.t: Fix typos in comments

12 days agoQuell "used only once" warning in test suite
Aaron Crane [Thu, 19 Nov 2015 11:29:24 +0000]
Quell "used only once" warning in test suite

12 days agomaint policy: allow fixes for new features
Aaron Crane [Sun, 15 Nov 2015 15:10:54 +0000]
maint policy: allow fixes for new features

As (Steve Hay)++ said on-list:

    I think it's a shame if users get a 5.X.0 release with some shiny new
    features which I hope they're excited about and start making use of,
    but then find bugs in those features and have to wait until 5.X+2.0,
    rather than 5.X.1, for fixes.

rjbs++ clarified that, although such changes constitute a break in backwards
compatibility, there are two reasons why bugs in new features should be
fixed in maint:

    * they delay people from using a feature for a year, because it does
      something stupid

    * they risk enshrining bad behavior under the usual program of bugward