This is a live mirror of the Perl 5 development currently hosted at
6 years agobisect-runner: Only run ./Configure -S when needed
Father Chrysostomos [Tue, 17 May 2016 20:00:08 +0000 (13:00 -0700)]
bisect-runner: Only run ./Configure -S when needed

We only need to run it when has been modified, which only
happens before 5.10.  From v5.23.4-46-g41d7307 onwards ./Configure -S
did not work, until v5.23.5-90-g473edb6, so we need to skip this if we
want to bisect in that region.  (Or we could just skip the die, but we
might as well skip the system call, too.)

6 years emit fewer blank lines during build
Aaron Crane [Tue, 17 May 2016 15:41:16 +0000 (16:41 +0100)] emit fewer blank lines during build

I find this makes it easier rather than harder to see what's going on.

6 years agoUpdate Sys-Syslog to CPAN version 0.34
Chris 'BinGOs' Williams [Tue, 17 May 2016 12:37:52 +0000 (13:37 +0100)]
Update Sys-Syslog to CPAN version 0.34


0.34 -- 2016.05.06 -- Sebastien Aperghis-Tramoni (SAPER)
        [BUGFIX] CPAN-RT#105117: use %e where available, fall back to %d and
        a regexp where not (Markus Laker).
        [BUGFIX] CPAN-RT#98446: trailing new line with perror (Alexander Bluhm).
        [BUGFIX] CPAN-RT#105152: the noeol option was ignored (Markus Laker).
        [PORT] CPAN-RT#104710: loadable library and perl binaries are mismatched,
        because of missing CCFLAGS (CHORNY, KMX).
        [PORT] No longer inheriting from Exporter doesn't work before Perl 5.8.3.
        [BUGFIX] CPAN-RT#90538: facility from openlog() is not used (Anton Yuzhaninov).
        [PORT] CPAN-RT#90212: Support non-Windows platforms where syslog.h
        is not defined (Brian Fraser).
        [PORT] CPAN-RT#90224: setlocale() is not available everywhere, for
        example on Android (Brian Fraser).
        [PORT] CPAN-RT#90218: getproto*() and getserv*() functions are not
        available everywhere (Brian Fraser).
        [DOC] CPAN-RT#102058: mention the repository in the documentation.

6 years agoUpdate Term-ANSIColor to CPAN version 4.05
Chris 'BinGOs' Williams [Tue, 17 May 2016 12:35:33 +0000 (13:35 +0100)]
Update Term-ANSIColor to CPAN version 4.05


Term::ANSIColor 4.05 (2016-03-20)

    Color aliases are now restricted to ASCII alphanumerics, due to the
    below change.

    Delay loading of the Carp module and avoid using [:upper:], \w, and \d
    in regular expressions to reduce the amount of memory this module
    consumes.  (Normally, I wouldn't worry about this, but this module is
    very light-weight and can be useful even in highly space-constrained
    environments, and the impact is slight.)  Thanks, Nicolas R.

    Provide a mailto address in bug tracking metadata, use the shorter
    form of the RT bug tracker URL, and fix the license value to match the
    new metadata specification.  Rework Makefile.PL so that the munging
    for older versions of ExtUtils::MakeMaker is less intrusive.

6 years agoperlbug: don't run editor when noninteractive
Aaron Crane [Tue, 17 May 2016 11:24:54 +0000 (12:24 +0100)]
perlbug: don't run editor when noninteractive

This fixes tests on Win32.

6 years Don’t use /a
Father Chrysostomos [Tue, 17 May 2016 09:26:21 +0000 (02:26 -0700)] Don’t use /a

It’s convenient to be able to run it under the system perl, which
might be too old for /a.

In this code path, the utf8 flag will be off anyway.

6 years agoRemove LEX_KNOWNEXT and stop using PL_lex_defer
Father Chrysostomos [Tue, 17 May 2016 08:50:45 +0000 (01:50 -0700)]
Remove LEX_KNOWNEXT and stop using PL_lex_defer

See these commits for the background:


Perl’s lexer keeps an internal state (PL_lex_state), whereby it tracks
what kind of code it is parsing (normal, interpolated, etc.).

Due to the way bison works, yylex() must return exactly one token for
each call.  Since it needs to emit multiple tokens at times, it pushes
them on to a pending token stack, and then emits one for each subse-
quent yylex() call until the stack is empty.

Previously, it would record whether it needed to look at the stack by
setting PL_lex_state to LEX_KNOWNEXT.  Then, after emptying the pend-
ing token stack, it would set PL_lex_state back to its previous value,
temporarily stored in PL_lex_defer.

In some cases of syntax errors, scopes may be popped, and
PL_lex_state, which gets localised, may be unwound and set to a pre-
vious value.  The result was that PL_lex_state and the pending token
stack could get out of synch, resulting in crashes.

The commits cited above fixed things by working around the
LEX_KNOWNEXT mechanism, and checking the pending token stack itself,
rather than PL_lex_state, in determining whether it needed popping.

So we ended up with LEX_KNOWNEXT and PL_lex_defer doing nothing much
and getting in the way, requiring workarounds.

This commit just removes them.  We are already looking at the pending
token stack directly, instead of checking for LEX_KNOWNEXT.  And if
we no longer set PL_lex_state to that value, we no longer need to use
PL_lex_defer to hold the previous value, because PL_lex_state now gets
*left alone*.

I am leaving PL_lex_defer in the parser struct for now, in the hope
that it will result in fewer immediate CPAN patches.

(I intended to fix this shortly after 5.22, but Real Life got
in the way.)

6 years agoUse concat overloading for "foo$_->$*"
Father Chrysostomos [Tue, 17 May 2016 08:24:03 +0000 (01:24 -0700)]
Use concat overloading for "foo$_->$*"

This is the only discrepancy between $$_ and $_->$* that I know about.

To get ->@... interpolation to work, we have to emit a special
POSTJOIN token, which has just the right precedence to get it to apply
to the right amount of code before it, which perly.y then turns into a
regular join(...).

->$* and ->$#* were also going through that same code path, though it
turns out that simply omitting the POSTJOIN token for these dollar
tokens Just Works.  (I thought the fix would be more complicated.)

Now $_->$* within quotes becomes a direct argument to the concat ope-
rator, instead of being wrapped in a stringify(...) (what join(...)
optimises to with a single-item list).

6 years agoFix crash with: undef *_; shift;
Father Chrysostomos [Tue, 17 May 2016 07:03:09 +0000 (00:03 -0700)]
Fix crash with: undef *_; shift;

Commit v5.13.0-149-g538f575 added on optimisation to shift() that
makes pp_shift fetch @_ directly, instead of having two separate ops.

Unfortunately, it used the wrong macro, namely GvAV, instead of GvAVn.
The latter makes sure the array actually exists.

6 years agoRemove some autoderef leftovers
Father Chrysostomos [Tue, 17 May 2016 06:42:09 +0000 (23:42 -0700)]
Remove some autoderef leftovers

6 years agobetter glibc i_modulo bug handling
jimc [Tue, 15 Mar 2016 04:02:52 +0000 (22:02 -0600)]
better glibc i_modulo bug handling

pp-i-modulo code currently detects a glibc bug at runtime, at the 1st
exec of each I_MODULO op.  This is suboptimal; the bug should be
detectable early, and PL_ppaddr[I_MODULO] updated just once, before
any optrees are built.

Then, because we avoid the need to fixup I_MODULO ops in already built
optrees, we can drop the !PERL_DEBUG_READONLY_OPS limitation on the
alternative/workaround I_MODULO implementation that avoids the bug.


bug detection code is copied from PP(i_modulo),
into S_fixup_platform_bugs(), and called from perl_construct().
It patches Perl_pp_i_modulo_1() into PL_ppaddr[I_MODULO] when needed.


PP(i_modulo_0), the original implementation, is renamed to PP(i_modulo)

PP(i_modulo_1), the bug-fix workaround, is renamed _glibc_bugfix
                it is #ifdefd as before, but dropping !PERL_DEBUG_READONLY_OPS

PP(i_modulo) - the 1st-exec switcher code, is dropped

Two i_modulo entries are added to @raw_alias.
- 1st alias:  Perl_pp_i_modulo     => 'i_modulo'
- 2nd alt:    Perl_pp_i_modulo_glibc_bugfix => 'i_modulo'

1st is a restatement of the default alias/mapping that would be
created without the line.  2nd line is then seen as alternative to the
explicit mapping set by 1st.

Alternative functions are written to pp_proto.h after the standard
Perl_pp_* list, and include #if-cond, #endif wrappings, as was
specified by 2nd @raw_alias addition.

Changes tested by inserting '1 ||' into the 3 ifdefs and bug-detection code.


In pp_proto.h generation, the #ifdef wrapping code which handles the
alternative functions looks like it should also be used for the
non-alternate functions.  In particular, there are a handful of
pp-function prototypes that should be wrapped with #ifdef HAS_SOCKET.
That said, there have been no problem reports, so I left it alone.

TonyC: make S_fixup_platform_bugs static, porting/libperl.t was failing.

6 years Correct typo
Father Chrysostomos [Tue, 17 May 2016 04:43:27 +0000 (21:43 -0700)] Correct typo

Sorry for the noisy patch.  I can’t modify without
regenerating stuff, because the checksum changes.

6 years ago[perl #127976] Restore ‘or array’ to each($s) err
Father Chrysostomos [Sun, 15 May 2016 20:36:00 +0000 (13:36 -0700)]
[perl #127976] Restore ‘or array’ to each($s) err

This part of the message was accidentally deleted when the autoderef
feature was introduced.

This commit also emits this error in addition to the ‘Experimental
forbidden’ message in those cases where the latter occurs, since it
makes things clearer.

6 years ago[perl #127976] Use yyerror for each $scalar error
Father Chrysostomos [Mon, 25 Apr 2016 01:19:59 +0000 (18:19 -0700)]
[perl #127976] Use yyerror for each $scalar error

yyerror queues the error, allowing for multiple error messages for
syntax errors.  So at compile time it is generally better than croak.
It also provides more information about the location of the error,
with things like ‘at EOF’ and ‘near such and such’.

The hash functions each, values, and keys were using croak for the
‘Experimental forbidden’ message, unlike the array functions, which
were already using yyerror.

This commit changes the hash functions to use yyerror.

6 years agostartkve.t: Refactor setting of $errpat
Father Chrysostomos [Mon, 25 Apr 2016 00:21:44 +0000 (17:21 -0700)]
startkve.t: Refactor setting of $errpat

This will simplify things in the next commit.

6 years agosmartkve.t: Delete now-redundant tests
Father Chrysostomos [Sun, 24 Apr 2016 05:33:48 +0000 (22:33 -0700)]
smartkve.t: Delete now-redundant tests

The sole purpose of these tests was to make sure that the rvalues
and reach ops had the OA_DANGEROUS flag set and consequently behaved
correctly in list assignments that swap arguments.  (See d86b3122
for details.)

The tests were changed in commit 26230909, when the two ops in ques-
tion were removed, to use plain values and each ops (without the r-),
but those cases are already tested elsewhere by other tests that
d86b3122 added.

6 years ago(perl #127780) point backtick users at the open pragma
Tony Cook [Tue, 17 May 2016 01:47:07 +0000 (11:47 +1000)]
(perl #127780) point backtick users at the open pragma

6 years agoCoverity sees a path where a NULL op might be dereferenced.
Jarkko Hietaniemi [Mon, 16 May 2016 22:30:44 +0000 (18:30 -0400)]
Coverity sees a path where a NULL op might be dereferenced.

A very, very, very long path.  Coverity CID 104861.

6 years agoUpgrade to threads::shared 1.52
jdhedden [Mon, 16 May 2016 18:47:21 +0000 (14:47 -0400)]
Upgrade to threads::shared 1.52

6 years agoUpgrade to threads 2.08
jdhedden [Mon, 16 May 2016 17:41:39 +0000 (13:41 -0400)]
Upgrade to threads 2.08

6 years agoDo not dump verbose diagnostics in perl core.
Karen Etheridge [Mon, 16 May 2016 21:35:45 +0000 (14:35 -0700)]
Do not dump verbose diagnostics in perl core.

For:  RT # 128160

6 years agoPOSIX: test that all subroutines are exported
Aaron Crane [Fri, 13 May 2016 12:50:01 +0000 (13:50 +0100)]
POSIX: test that all subroutines are exported

6 years agoPOSIX: delete the L_tmpnam and L_tmpname symbols
Aaron Crane [Fri, 13 May 2016 12:10:38 +0000 (13:10 +0100)]
POSIX: delete the L_tmpnam and L_tmpname symbols

The history here is relatively complicated.

The L_tmpname symbol is neither specified by POSIX or defined by traditional
Unix system; it's simply a typo for L_tmpnam, first introduced in Perl 5.0.

Commit 33f01dd10fdacfa5ccb83c4f933cacb0f65b707e (part of Perl 5.6) added
support for L_tmpnam, treating L_tmpname as a back-compat synonym. However,
no version of Perl has ever made L_tmpnam exportable, even at explicit
request; using that symbol has always required using its fully-qualified
POSIX::L_tmpnam name.

During the 5.8 development cycle, an apparently-unintended consequence of
various improvements to the way that generates and exports constants
meant that L_tmpname stopped working. It continued to be exportable, but
trying to use the constant yielded an exception saying "Your vendor has not
defined POSIX macro L_tmpname". (This isn't exactly incorrect, of course: no
vendor defines the macro L_tmpname!)

At this point, therefore, there seems little benefit in trying to resurrect
support for the L_tmpname typo: it's impossible for any program running on
5.8.0 or later to have successfully used it.

There's perhaps an argument for making L_tmpnam exportable at this point,
since it does work when called by its full-qualified name. One option would
be to add it to @EXPORT_OK; but that is explicitly counselled against by the comments summarising the policy on symbol exports, which recommend
adding a new export tag instead. In this case, the obvious tag to use is
:stdio_h (which already exists), since the C-level symbol is provided by the
<stdio.h> header.

However, that doesn't seem worth it to me. The only possible use of L_tmpnam
is to create a buffer of a size suitable for passing to the tmpnam() C
function (which is presumably why nobody's noticed in the last fifteen years
that the symbol isn't actually exported). Furthermore, the wrapper
for tmpnam() itself was deleted by 19fc2965b60669d7bc25548edb32e3cdd86a68de,
a few days ago, so merely deleting this additional symbol seems correct.

6 years agoPOSIX: add new :sys_socket_h export tag with missing MSG_* symbols
Aaron Crane [Fri, 13 May 2016 11:43:20 +0000 (12:43 +0100)]
POSIX: add new :sys_socket_h export tag with missing MSG_* symbols

These symbols were not previously exported at all, despite having been added
in the 5.9 cycle.

6 years agoPOSIX: add new :netdb_h tag with missing EAI_* symbols
Aaron Crane [Fri, 13 May 2016 11:37:17 +0000 (12:37 +0100)]
POSIX: add new :netdb_h tag with missing EAI_* symbols

These symbols were not previously exported at all, despite having been added
in the 5.11 cycle.

6 years agoPOSIX: add lround() to the :math_h_c99 export tag
Aaron Crane [Fri, 13 May 2016 10:29:01 +0000 (11:29 +0100)]
POSIX: add lround() to the :math_h_c99 export tag

Closes RT#127821.

6 years agoperlbug: wrap overly long lines
Niko Tyni [Mon, 25 Apr 2016 13:31:00 +0000 (16:31 +0300)]
perlbug: wrap overly long lines

Mail transport agents limit the length of message lines at SMTP time.
One observed limit is 1000 characters per line. Mail user agents typically
work around these limits by MIME-encoding the message. Since perlbug
doesn't do that, it needs to limit the length of its lines manually to
make sure bug reports get delivered.

The longest lines in perlbug reports normally come from Config::myconfig
output, particularly 'config_args', which has been observed to exceed
1000 characters on some configurations, causing report rejection. While
less likely, the list of local patches is another potential source of
overly long lines.

Use Text::Wrap (if available) to wrap the body of the report at an
arbitrarily chosen and hopefully safe limit of 900 characters. No
indentation or continuation line markers are added, though it would
be easy to add those if desired. Attachments and mail headers are not


6 years agoperlbug: Refactor duplicated file reading code
Niko Tyni [Thu, 28 Apr 2016 15:50:17 +0000 (18:50 +0300)]
perlbug: Refactor duplicated file reading code

_send_message_mailsend() needs to build the message itself rather than
calling build_complete_message() like the other backends, but they can
still share the file reading code, and so can the 'display report' part.

6 years agoperlbug: Add unit tests
Niko Tyni [Sun, 1 May 2016 19:53:11 +0000 (22:53 +0300)]
perlbug: Add unit tests

Some of these tests have to mimic the interactive interface, which is
probably rather fragile. However, as long as -F overrides any actual
sending, no mail bombs will hopefully result.

6 years agoperlbug: Allow subjects without whitespace in test mode
Niko Tyni [Sun, 1 May 2016 19:19:13 +0000 (22:19 +0300)]
perlbug: Allow subjects without whitespace in test mode

Passing whitespace in an option through runperl() doesn't seem
to work, so relax the check in test mode (-t) for noninteractive testing.

6 years agoperlbug: quit main loop on empty answer / eof in test mode
Niko Tyni [Sun, 1 May 2016 17:06:37 +0000 (20:06 +0300)]
perlbug: quit main loop on empty answer / eof in test mode

This makes it possible to drive perlbug noninteractively
without having it go to an infinite loop on end of file.

The change has no effect in non-test mode, where the default answer is
the empty string.

This is groundworks for perlbug unit tests.

6 years agoperlbug: Allow noninteractive use in test mode (-t option)
Niko Tyni [Sun, 1 May 2016 17:02:49 +0000 (20:02 +0300)]
perlbug: Allow noninteractive use in test mode (-t option)

This is groundworks for perlbug unit tests.

Not all of the interactive questions can be overridden on
the command line, so we will have to pipe in commands.

Adapt the test mode ("-t"), which used to just override the
recipient address, for this rather than inventing one more
new option.

6 years agoCorrect info in for dists already on CPAN
Chris 'BinGOs' Williams [Mon, 16 May 2016 11:29:18 +0000 (12:29 +0100)]
Correct info in for dists already on CPAN

6 years agoUpdate Digest-MD5 to CPAN version 2.55
Chris 'BinGOs' Williams [Mon, 16 May 2016 11:26:16 +0000 (12:26 +0100)]
Update Digest-MD5 to CPAN version 2.55


2016-03-09   Gisle Aas <>

   Release 2.55

   Gordon Stanton (2):
      Make use warnings work including test cases.
      Initial Travis config

   Gisle Aas (1):
      Avoid warning: 'static' is not at beginning of declaration [RT#105646]

6 years agoUpdate IPC-Cmd to CPAN version 0.94
Chris 'BinGOs' Williams [Mon, 16 May 2016 11:21:53 +0000 (12:21 +0100)]
Update IPC-Cmd to CPAN version 0.94


0.94 Fri Feb 12 18:55:05 GMT 2016

  Bug fixes:
  * move __END__ above POD in documentation (plicease)
  * Don't clobber $SIG{__DIE__} and $SIG{__WARN__} in open3_run() (avar)
  * Fix 'terminate_on_signal' segfaulting (Petya Kohts)
  * Fix usage of fcntl(..., F_GETFL, ...) (tonyc)

6 years agoUpdate Archive-Tar to CPAN version 2.08
Chris 'BinGOs' Williams [Mon, 16 May 2016 11:20:21 +0000 (12:20 +0100)]
Update Archive-Tar to CPAN version 2.08

6 years ago[perl #128052] make t/ compatible with older Perls
Aaron Crane [Mon, 16 May 2016 11:19:03 +0000 (12:19 +0100)]
[perl #128052] make t/ compatible with older Perls

The RT ticket points out that the threads and threads::shared libraries,
among other CPAN modules, copy t/ and must operate on older versions
of Perl; but that the version in threads 2.07 and threads::shared 1.51
contains constructs that require Perl 5.10.

This change restores 5.8 compatibility in t/, ready for reimporting
into the CPAN releases of those modules.

I can't see a way to test that this compatibility doesn't get accidentally
broken in the future, unfortunately.

6 years agoupgrade Module-Metadata to 1.000032
Karen Etheridge [Mon, 16 May 2016 02:19:01 +0000 (19:19 -0700)]
upgrade Module-Metadata to 1.000032

6 years agofix typo in RMG
Karen Etheridge [Mon, 16 May 2016 02:18:39 +0000 (19:18 -0700)]
fix typo in RMG

6 years agoMaxwell Carey is now a perl author
Tony Cook [Mon, 16 May 2016 00:59:13 +0000 (10:59 +1000)]
Maxwell Carey is now a perl author

6 years agoClarify description of sprintf "%.1g"
Maxwell Carey [Mon, 9 May 2016 21:33:41 +0000 (15:33 -0600)]
Clarify description of sprintf "%.1g"

sprintf "%.1g" sets the number of *significant* digits, not the
maximum number of digits to show. Added examples for values less
than 1.

6 years agoFix Scalar-List-Utils build on C89 compilers; patch sent upstream
Aaron Crane [Mon, 16 May 2016 00:34:25 +0000 (01:34 +0100)]
Fix Scalar-List-Utils build on C89 compilers; patch sent upstream

6 years agoFix Scalar-List-Utils build on C++ compilers; patch sent upstream
Aaron Crane [Mon, 16 May 2016 00:15:44 +0000 (01:15 +0100)]
Fix Scalar-List-Utils build on C++ compilers; patch sent upstream

6 years ago[cpan#100183] Add missing "<FH> chunk #" phrase to Carp messages
Aaron Crane [Sun, 24 Apr 2016 15:24:43 +0000 (16:24 +0100)]
[cpan#100183] Add missing "<FH> chunk #" phrase to Carp messages

Commit 89988fbd2f7d8a44526a3cd9ab671b3102898bc9 added the relevant phrase for
line-oriented filehandles; this extends that to also cover chunk-oriented

The patch was supplied by Chris R Donnelly <> on the ticket; I have extended it to include a test.

6 years agoUpgrade to Scalar-List-Utils 1.45 from CPAN
Jarkko Hietaniemi [Sun, 15 May 2016 22:32:03 +0000 (18:32 -0400)]
Upgrade to Scalar-List-Utils 1.45 from CPAN

6 years agoUpgrade to DB_File 1.838 from CPAN.
Jarkko Hietaniemi [Sun, 15 May 2016 22:03:33 +0000 (18:03 -0400)]
Upgrade to DB_File 1.838 from CPAN.

6 years agosv.c: fix missing word in apidoc
Aaron Crane [Sun, 15 May 2016 21:45:10 +0000 (22:45 +0100)]
sv.c: fix missing word in apidoc

6 years ago[perl #128086] Test the prev commit
Father Chrysostomos [Sun, 15 May 2016 20:49:33 +0000 (13:49 -0700)]
[perl #128086] Test the prev commit

6 years ago[perl #128086] Fix precedence in hv_ename_delete
Hugo van der Sanden [Sun, 15 May 2016 20:48:58 +0000 (13:48 -0700)]
[perl #128086] Fix precedence in hv_ename_delete

A stash’s array of names may have null for the first entry, in which
case it is not one of the effective names, and the name count will
be negative.

The ‘count > 0’ is meant to prevent hv_ename_delete from trying to
read that entry, but a precedence problem introduced in 4643eb699
stopped it from doing that.

[This commit message was written by the committer.]

6 years agoinline.h: Suppress g++ warning under threads
Father Chrysostomos [Sun, 15 May 2016 18:01:36 +0000 (11:01 -0700)]
inline.h: Suppress g++ warning under threads

In file included from perl.h:5853,
                 from op.c:103:
inline.h:712: warning: unused parameter 'my_perl'

6 years agoDump empty-string ENAMEs as empty strings
Father Chrysostomos [Sun, 15 May 2016 17:59:18 +0000 (10:59 -0700)]
Dump empty-string ENAMEs as empty strings

They were coming out as ‘(null)’, which is incorrect and confusing.

6 years agoop.c: Remove special cases for array funcs
Father Chrysostomos [Sun, 15 May 2016 17:56:22 +0000 (10:56 -0700)]
op.c: Remove special cases for array funcs

We no longer need special cases for the prototypes for array functions,
since autodef has been removed, and these are now perfectly regular.

6 years agoMake barewords constant-foldable
Aaron Crane [Sun, 15 May 2016 18:00:53 +0000 (19:00 +0100)]
Make barewords constant-foldable

Commit 11fa937b2766784f0f812687a7f81dd3761e605f, from August 1999, changed
constant folding to treat barewords as unfoldable. Public mailing-list
archives from that period are incomplete, unfortunately, and this change in
particular is no longer well documented; the only message still available
seems to be <>, with subject "Re:
Unwanted perl helpfullness". That message quotes a bug reporter pointing out
that a constant-folded bareword would fail to trigger the "not allowed while
strict subs in use" error under "use strict".

However, there's no information available about why the bug was fixed in this
way, rather than by merely ensuring that constant folding would produce that
error when necessary. The no_bareword_allowed() routine did already exist at
that point, for example. This change therefore adopts that approach.

This causes one minor change in behaviour: since barewords now take part in
constant folding, concatenating a bareword with another constant in void
context now produces a warning for the concatenated string, rather than for
the concatenation op. This seems like an acceptable change, given that
non-bareword constants already behave in the same way.

6 years agoS_fold_constants(): refactor foldability detection
Aaron Crane [Sun, 15 May 2016 17:44:16 +0000 (18:44 +0100)]
S_fold_constants(): refactor foldability detection

6 years ago[perl #127952] misoptimization for negated constant-ish on lhs of logop
Aaron Crane [Sun, 15 May 2016 14:11:12 +0000 (15:11 +0100)]
[perl #127952] misoptimization for negated constant-ish on lhs of logop

Negations were being incorrectly deleted from the op tree for an OP_AND or
OP_OR (corresponding to Perl code with any of `&& || and or`, or postfix
"if" or "unless") whose left-hand side looks like "!BAREWORD" or "!do {
'const' }" and whose right-hand side is a non-constant-foldable negation.

The symptom in the reported case was an assertion failure in ck_refassign
for an srefgen op, caused by such an OP_NOT having been nulled. But other
cases exist that instead yielded incorrect results.

The underlying cause is that two optimisations in S_new_logop() were
partially interfering with each other. One of those attempts to optimise
code like "!$x && !$y" to the equivalent of "!($x || $y)", saving a
negation op; this is valid by De Morgan's laws. If it detects code of
this form, it nulls out the negations on each side of the "&&", and makes
a note to wrap the op it generates inside a new OP_NOT.

The other optimisation looks at the left-hand arm, and if it's a constant at
compile time, avoids the entire logop in favour of directly evaluating the
lhs or rhs as appropriate, and eliding whichever arm is no longer needed.
This optimisation is important for code like this:

    use constant DEBUG => …;
    print_debug_output() if DEBUG;

because it allows the entire statement to be eliminated when DEBUG is false.

When both conditions were true simultaneously, the De Morgan optimisation
was applied before the constant-based arm elision. But the arm elision
involved returning early from S_new_logop(), so the code later in that
function that wraps the generated op in a new OP_NOT never had a chance to
run. This meant that "!X && !Y" when X is constant was being compiled as if
it were in fact "X || Y", which is clearly incorrect.

This is, however, a very rare situation: it requires the lhs to be an OP_NOT
that dominates an OP_CONST (possibly with some intervening OP_LINESEQ or
similar). But OP_NOT is constant-foldable, so that doesn't normally happen.
The two ways for it to happen are:

- The constant is a bareword (since even though barewords are constants,
  they don't currently participate in constant folding)

- The constant is hidden inside one or more layers of do{} (since that
  serves as a barrier to constant folding, but the arm-elision optimisation
  is smart enough to search recursively through the optree for the real

The fix is much simpler than the explanation: apply the optimisations in the
opposite order, so that when arm elision returns early, the negation ops
haven't yet been nulled.

6 years agoop.c: add some explanatory comments to S_new_logop()
Aaron Crane [Sun, 15 May 2016 15:38:48 +0000 (16:38 +0100)]
op.c: add some explanatory comments to S_new_logop()

6 years agoDelete dead null-pointer check in op.c
Aaron Crane [Sun, 15 May 2016 11:21:07 +0000 (12:21 +0100)]
Delete dead null-pointer check in op.c

Code above this point has already used this variable without checking
whether it's null, so this can't accomplish anything.

6 years agoFix misleading indentation in op.c
Aaron Crane [Sat, 14 May 2016 22:29:45 +0000 (23:29 +0100)]
Fix misleading indentation in op.c

6 years agofix symbol detection with gcc 6 link-time optimization (RT #128131)
Lukas Mai [Wed, 11 May 2016 20:15:34 +0000 (22:15 +0200)]
fix symbol detection with gcc 6 link-time optimization (RT #128131)

6 years agoperldelta: OP_PARENT, and require ::Foo::Bar
David Mitchell [Sat, 14 May 2016 14:39:41 +0000 (15:39 +0100)]
perldelta: OP_PARENT, and require ::Foo::Bar

6 years agoadd PERL_OP_PARENT to 'perl -V' output
David Mitchell [Sat, 14 May 2016 14:20:11 +0000 (15:20 +0100)]
add PERL_OP_PARENT to 'perl -V' output

6 years agoenable PERL_OP_PARENT by default.
David Mitchell [Sat, 14 May 2016 14:14:28 +0000 (15:14 +0100)]
enable PERL_OP_PARENT by default.

This makes the last op_sibling field in a chain of OP siblings
point back the parent node rather than being NULL, with the endness
instead being indicated by a flag.


6 years agosv.c: Add comment
Karl Williamson [Fri, 13 May 2016 02:32:21 +0000 (20:32 -0600)]
sv.c: Add comment

6 years agoUse memmem() if available on the platform for Perl_ninstr()
Karl Williamson [Wed, 11 May 2016 04:17:22 +0000 (22:17 -0600)]
Use memmem() if available on the platform for Perl_ninstr()

6 years agoMerge branch to not require mathoms special cases into blead
Karl Williamson [Fri, 13 May 2016 02:21:44 +0000 (20:21 -0600)]
Merge branch to not require mathoms special cases into blead

6 years agomathoms.c: Remove special casing from instr()
Karl Williamson [Wed, 11 May 2016 04:12:06 +0000 (22:12 -0600)]
mathoms.c: Remove special casing from instr()

This function was recently moved to mathoms.  Now that various changes
have been made to the system, the special casing needed to get things to
compile can be removed.  Also, it can just call the macro
implementation, instead of what the macro expands to.

6 years agoMake two functions for 5.005 backcompat MATHOMS
Karl Williamson [Wed, 11 May 2016 03:02:16 +0000 (21:02 -0600)]
Make two functions for 5.005 backcompat MATHOMS

The functions sv_setpviv() and sv_setpviv_mg() exist only for backcompat
with 5.005. (verified with Jarkko and Nicholas).  Make them compile only
when mathoms is present.  They can't be moved to mathoms.c because they
both call a static function visible only in sv.c.

6 years agoembed.fnc: Alter 'b' flag meaning
Karl Williamson [Wed, 11 May 2016 04:01:30 +0000 (22:01 -0600)]
embed.fnc: Alter 'b' flag meaning

This commit changes this flag to mean that the backward compatibility
functions are compiled unless the -DNO_MATHOMS cflag is specified to
Configure.  Previously the meaning was sort of like that but not

Doing this means that the prototypes that needed to be manually added to
mathoms.c are no longer needed.  No special parameter assertions have to
be made. no longer needs to parse mathoms.c and have special
cases for it.  And several special case entries in embed.fnc can be
non-special cased.

6 years agoembed.fnc: Temporarily remove backcompat flag for 2 fcns
Karl Williamson [Thu, 12 May 2016 17:51:10 +0000 (11:51 -0600)]
embed.fnc: Temporarily remove backcompat flag for 2 fcns

Otherwise, the next commit could potentially cause errors when bisecting
under -DNO_MATHOMS.  They will be restored 2 commits hence.

6 years agoregen/ Don't: #define FOO FOO
Karl Williamson [Thu, 12 May 2016 17:31:10 +0000 (11:31 -0600)]
regen/ Don't: #define FOO FOO

Doing so would be useless.  This doesn't currently happen, but would in
a couple of commits.

6 years agoembed.fnc: Change 'b' flag to not imply 'p' flag
Karl Williamson [Wed, 11 May 2016 03:26:33 +0000 (21:26 -0600)]
embed.fnc: Change 'b' flag to not imply 'p' flag

By doing this, we make it more general, which will be useful in a few

6 years agoembed.fnc: Indicate ninstr(), rninstr() have documentation
Karl Williamson [Wed, 11 May 2016 00:35:54 +0000 (18:35 -0600)]
embed.fnc: Indicate ninstr(), rninstr() have documentation

6 years agomathoms.c: Fix prototype
Karl Williamson [Tue, 10 May 2016 23:51:58 +0000 (17:51 -0600)]
mathoms.c: Fix prototype

This would probably have refused to compile if anyone were actually
using this function in a threaded build.

6 years agoregen/ Verify flags field of embed.fnc
Karl Williamson [Tue, 10 May 2016 23:34:25 +0000 (17:34 -0600)]
regen/ Verify flags field of embed.fnc

Make sure that the specified flags are legal.

6 years agoembed.fnc: Remove improper flag character
Karl Williamson [Tue, 10 May 2016 23:32:36 +0000 (17:32 -0600)]
embed.fnc: Remove improper flag character

This was introduced by efaf36747029c85b4d8825318cb4d485a0bb350e;
apparently a typo.

6 years agoPOSIX.pod: Fix grammar
Karl Williamson [Thu, 12 May 2016 15:11:00 +0000 (09:11 -0600)]
POSIX.pod: Fix grammar

6 years agoREADME.freebsd: Add some L<>, C<> to pod
Karl Williamson [Mon, 9 May 2016 17:51:36 +0000 (11:51 -0600)]
README.freebsd: Add some L<>, C<> to pod

6 years agoCroak on unimplemented already at import time
Jarkko Hietaniemi [Tue, 10 May 2016 12:56:13 +0000 (08:56 -0400)]
Croak on unimplemented already at import time

For example

  perl -MPOSIX=atexit -e 1

is never going to work in runtime, so why should it work in compile time.

This will probably break a lot of CPAN code, that have "good reasons"
for their strange imports.

Also the error messages change format, which will no doubt  break another
set of equally righteous CPAN modules.

6 years agoRemove the deprecated POSIX::tmpnam as unsafe
Jarkko Hietaniemi [Tue, 10 May 2016 12:42:37 +0000 (08:42 -0400)]
Remove the deprecated POSIX::tmpnam as unsafe

6 years agoSort the %replacement and %reimpl
Jarkko Hietaniemi [Tue, 10 May 2016 12:41:37 +0000 (08:41 -0400)]
Sort the %replacement and %reimpl

6 years agoupdate GNUmakefile for Test2 too
Tony Cook [Wed, 11 May 2016 04:54:02 +0000 (14:54 +1000)]
update GNUmakefile for Test2 too

6 years agoUpdate to the latest Test-Simple cpan dist
Chad Granum [Tue, 10 May 2016 14:44:27 +0000 (07:44 -0700)]
Update to the latest Test-Simple cpan dist

6 years agofix link to crosby paper on hash complexity attack
Doug Bell [Wed, 11 May 2016 16:10:40 +0000 (11:10 -0500)]
fix link to crosby paper on hash complexity attack

6 years agodocument the ?pair option to beforemaintrelease
Ricardo Signes [Wed, 11 May 2016 19:27:46 +0000 (15:27 -0400)]
document the ?pair option to beforemaintrelease

6 years ago[perl #128106] Fix reset with non-globs
Father Chrysostomos [Tue, 10 May 2016 21:14:40 +0000 (14:14 -0700)]
[perl #128106] Fix reset with non-globs

reset with a string argument was assuming that anything in a
stash would be a glob.  It crashed on anything else.

6 years agoSync Config::Perl::V with release 0.26
H.Merijn Brand [Tue, 10 May 2016 14:45:12 +0000 (16:45 +0200)]
Sync Config::Perl::V with release 0.26

6 years agoUpdate Archive-Tar to CPAN version 2.06
Chris 'BinGOs' Williams [Tue, 10 May 2016 11:05:38 +0000 (12:05 +0100)]
Update Archive-Tar to CPAN version 2.06


2.06  24/04/2016 (ISHIGAKI && BOOK)
- changed some of the "A"s in the UNPACK constant to "a"
  to allow trailing whitespaces in an archived filename
- roundtrip tests

6 years agoUpdate perlfaq to CPAN version 5.021011
Chris 'BinGOs' Williams [Tue, 10 May 2016 11:03:25 +0000 (12:03 +0100)]
Update perlfaq to CPAN version 5.021011


5.021011    20162016-03-04 20:04:08Z
  * update info on Perl 6
  * fix LICENSE address and update prereq for its content
  * excluded README.pod from the shipped tarball distribution

6 years agoUpdate Locale-Codes to CPAN version 3.38
Chris 'BinGOs' Williams [Tue, 10 May 2016 11:02:32 +0000 (12:02 +0100)]
Update Locale-Codes to CPAN version 3.38

6 years ago[MERGE] disallow 'require ::Foo::Bar' etc
David Mitchell [Tue, 10 May 2016 10:16:00 +0000 (11:16 +0100)]
[MERGE] disallow 'require ::Foo::Bar' etc

6 years agoload-module.t: re-indent and add some comments.
David Mitchell [Tue, 10 May 2016 09:48:18 +0000 (10:48 +0100)]
load-module.t: re-indent and add some comments.

No functional changes.

6 years agomake 'require ::Foo::Bar' die
David Mitchell [Sat, 19 Mar 2016 20:16:22 +0000 (20:16 +0000)]
make 'require ::Foo::Bar' die

Originally, 'require ::Foo::Bar' would try to load /Foo/

The previous commit changed it so that  ::Foo::Bar mapped to Foo::Bar,
and so loaded Foo/ in the @INC path.

This commit takes the different approach of, instead of mapping, making
any bareword require that starts with '::' into an error instead.

It introduces a new error message:

    $ perl -e'require ::Foo::Bar'
    Bareword in require must not start with a double-colon: "::Foo::Bar"

See the thread at:

( I originally used '"::"' rather than 'a double-colon', but that
made the message a bit unpenetrable:

    Bareword in require must not start with "::": "::Foo::Bar"

6 years agoValidate the 'require Bare::Word' pathname.
Nicholas Clark [Wed, 27 Jun 2012 21:34:04 +0000 (23:34 +0200)]
Validate the 'require Bare::Word' pathname.

At runtime in require, validate the generated filename after translation
of '::' to '/' (and possible conversion from VMS to Unix format) to keep
the code simpler.  Reject empty module names, module names starting with
'/' or '.'  (ie absolute paths, hidden files, and '..'), and module names
containing NUL bytes or '/.' (ie hidden files and '..').

Add a test for Perl_load_module(), and check that it now rejects module
names which fall foul of the above rules.

Most of these can't trigger for a sinple bareword require since the
illegal module name will already have been rejected during parsing. However,
the Perl_load_module() fakes up a rquire optree including a bareword
OP_CONST, which *isn't* restricted by the lexer.

Note that this doesn't apply to non-bareword pathnames: these are both

    require "/foo/";
    $x =  "/foo/"; require $x;

[ This is cherry-picked from a branch Nicholas wrote 4 years ago, but
which was never merged. I've kept the body of the diff the same, modulo
rebasing, but re-worded the commit title and message.
Only one test was changed: the final one in load-module.t, since a
\0 in a pathname is now trapped earlier and gives a "can't locate" error
instead. For the same reason, it also required the addition of
"no warnings 'syscalls';".
- DAPM ]

6 years agoTreat require ::foo::bar; the same as foo::bar;
Nicholas Clark [Thu, 28 Jun 2012 20:35:20 +0000 (22:35 +0200)]
Treat require ::foo::bar; the same as  foo::bar;

[ This is cherry-picked from a branch Nicholas wrote 4 years ago, but
which was never merged. In the meantime it was agreed that 'require
::foo' should die instead of doing 'require foo'; but I've pulled it in
anyway as an interim commit, to make later cherry-picks easier. The die
will come in a later commit.

6 years agoreindent S_require_version()
David Mitchell [Sat, 19 Mar 2016 15:24:49 +0000 (15:24 +0000)]
reindent S_require_version()

Whitespace-only change.

6 years agoSplit the guts of pp_require into two static fns
David Mitchell [Sat, 19 Mar 2016 15:16:50 +0000 (15:16 +0000)]
Split the guts of pp_require into two static fns

S_require_version() and S_require_file() do the 'require 5.010001'
and 'require Foo::Bar' actions respectively.

This makes it clear that pp_require is effectively 2 disjoint functions,
and that all the local variables previously declared at the start of
pp_require actually belong exclusively to the file loading functionality.

This is based on a patch by Nicholas from 4 years ago, except that
I did the split from scratch since pp_require has been touched quite a
bit since then.

This commit splits it in such a way that the diff is kept as small as
possible. The next commit will re-indent.

6 years agofix #128109 - do not move RExC_open_parens[0] in reginsert
Yves Orton [Tue, 10 May 2016 07:44:31 +0000 (09:44 +0200)]
fix #128109 - do not move RExC_open_parens[0] in reginsert

In d5a00e4af6b155495be31a35728b8fef8e671ebe I merged GOSUB and GOSTART,
part of which involved making RExC_open_parens[0] refer to the start of
the pattern, and RExC_close_parens[0] referring to the end of the pattern.

This tripped up in reginsert in a subtle way, the start of the pattern
cannot and should not move in reginsert(). Unlike a paren that might
be at the start of the pattern which should move when something is inserted
in front of it, the start is a fixed point and should never move.

This patches fixes this up, and adds an assert to check that reginsert()
is not called once study_chunk() starts, as reginsert() does not adjust

This was noticed by hv while debugging [perl #128085], thanks hugo!

6 years agofix #128085 - SIGSEGV in S_regmatch with S_study_chunk: Assertion "!frame" failed.
Yves Orton [Mon, 9 May 2016 06:52:16 +0000 (08:52 +0200)]
fix #128085 - SIGSEGV in S_regmatch with S_study_chunk: Assertion "!frame" failed.

The goto target should have been before the if (frame) block.

Clearly this code is not well tested in our test suite. This patch
does NOT include tests.

6 years ago(perl #127923) add blacklists/whitelists to Locale::Maketext
Tony Cook [Tue, 10 May 2016 02:03:02 +0000 (12:03 +1000)]
(perl #127923) add blacklists/whitelists to Locale::Maketext

6 years ago(perl #127923) note priority between the white and blacklist
Tony Cook [Wed, 20 Apr 2016 06:30:05 +0000 (16:30 +1000)]
(perl #127923) note priority between the white and blacklist