This is a live mirror of the Perl 5 development currently hosted at
5 years agoCorrect a perldelta entry
Father Chrysostomos [Sat, 20 Aug 2016 05:08:14 +0000 (22:08 -0700)]
Correct a perldelta entry

The termcode variable in scan_const, which was an I32 and susceptible
to truncation, is not used to find the closing delimiter, but only to
check for special uses of delimiters such as in qr'...' and m?...? and
‘<’ which is used internally as the ‘closing delimiter’ for here-docs,
it being one that can never occur for other pyoq operators.

Hence, such strings already worked before, but now they work consis-
tently; \x{100000027} no longer suppresses regexep interpolation,
for instance.

5 years agoalways use the core serializers in EUMM for core tests
Karen Etheridge [Thu, 18 Aug 2016 19:47:41 +0000 (12:47 -0700)]
always use the core serializers in EUMM for core tests

5 years agoregenerate META.* using new CPAN::Meta, and always use the core serializers
Karen Etheridge [Thu, 18 Aug 2016 18:35:11 +0000 (11:35 -0700)]
regenerate META.* using new CPAN::Meta, and always use the core serializers

5 years agoChanges manually performed for one file.
Karen Etheridge [Fri, 19 Aug 2016 23:24:49 +0000 (19:24 -0400)]
Changes manually performed for one file.

cpan/CPAN-Meta/Lib/CPAN/ was being very naughty when it came to being
the target of 'git am'.  As committer, I extracted the diff for that file from
the patch supplied by the author and attempted to apply it via 'git apply'.
Still no luck.  Hence, I manually edited the source file.

For: RT #128987

5 years agoManually remove file recalcitrant to 'git am'.
James E Keenan [Fri, 19 Aug 2016 23:45:33 +0000 (19:45 -0400)]
Manually remove file recalcitrant to 'git am'.

5 years agoUpgrade CPAN-Meta from 2.150005 -> 2.150010 (Parse-CPAN-Meta now combined into this...
Karen Etheridge [Thu, 18 Aug 2016 17:14:00 +0000 (10:14 -0700)]
Upgrade CPAN-Meta from 2.150005 -> 2.150010 (Parse-CPAN-Meta now combined into this distribution)

    2.150010  2016-08-18 12:10:08-04:00 America/New_York


      - the YAML and JSON backend variables are ignored when building/testing the
        perl core itself, where non-core backends are not yet installed.


      - Added "use warnings" to Parse::CPAN::Meta

    2.150009  2016-07-02 21:07:49-04:00 America/New_York (TRIAL RELEASE)


      - Fixed used of Encode in Parse::CPAN::Meta::load_json_string
        (Cherry picked from Parse::CPAN::Meta 1.4422)

    2.150008  2016-06-28 17:01:03-04:00 America/New_York (TRIAL RELEASE)


      - Merged Parse::CPAN::Meta 1.4420 into this distribution

    2.150007  2016-06-28 03:48:16-04:00 America/New_York (TRIAL RELEASE)


      - The cloning routine would raise an error on expected types when it
        previously would stringify.  The old behavior is restored.

    2.150006  2016-06-23 20:05:46-04:00 America/New_York (TRIAL RELEASE)


      - CPAN::Meta::Prereqs now fully accepts phases and types starting with 'x_'.
        New 'phases' and 'types_in' interfaces have been added.

      - No longer relies on JSON backend for data structure cloning. This is
        much faster than using JSON::PP.


      - The 'extra_mappings' feature for meta merging is now tested and

      - During tests, delete new environment variables added by
        Parse::CPAN::Meta 1.4418


      - Clarifies acceptable values for booleans

      - Cleaned up text and links of historical specs.

5 years agoperldelta: Updates for 5.24
Karl Williamson [Fri, 19 Aug 2016 20:17:42 +0000 (14:17 -0600)]
perldelta: Updates for 5.24

This constitutes the changes that khw made that he thinks warrant
mention in perldelta.

5 years agoEncode: revert commit that introduces security holes
Karl Williamson [Fri, 19 Aug 2016 20:07:53 +0000 (14:07 -0600)]
Encode: revert commit that introduces security holes

This reverts a portion of commit
0f33e03c7e91f63bcd07b5ddfc00101715fa1fc0 which introduces some security
holes in checking for UTF-8 malformations.  In particular, it allows
overflow in non-strict mode, and overlongs in either mode.

See discussion at

This reversion is to make sure that we don't release even a development
version with known security holes.  A final disposition is still to be

5 years agoDo not show error message if errno = 0 for flush fail on STDOUT
H.Merijn Brand [Fri, 19 Aug 2016 18:44:14 +0000 (20:44 +0200)]
Do not show error message if errno = 0 for flush fail on STDOUT

Somehow (on HP-UX Itanium) the flush fails, but errno is still 0
The lib/warnings.t test then shows

Filehandle STDOUT opened only for output at - line 3.
Filehandle STDOUT opened only for output at - line 3.
Unable to flush stdout: Error 0

This change suppresses that last line if errno is (still) 0

5 years agoav_fetch(): remove check for freed SV
David Mitchell [Fri, 19 Aug 2016 10:39:20 +0000 (11:39 +0100)]
av_fetch(): remove check for freed SV

Currently av_fetch() has this extra test:

    if (AvREIFY(av) && SvIS_FREED(AvARRAY(av)[key])) {
        /* eg. @_ could have freed elts */
        AvARRAY(av)[key] = NULL;        /* 1/2 reify */

which basically says that if the array has the reify flag set (typically
only @_ has this) and if the element being retrieved in it has been freed,
then replace it with an undef value instead.

This can be triggered with code like:

    sub f {
        $r = 0;
        my $var = $_[0];

    $r = do { my $x; \$x };

which leaves $var as undef rather than causing a "panic: attempt to copy
freed scalar".

However, code like

    my ($var) = @_;

*won't* get handled specially, and will still trigger the panic.

It was added in 1996 as a result of this thread:

    From: Andreas Koenig <>
    Subject: SEGV with $_[0] and circular references
    Message-Id: <>

That was in the context of getting a SEGV - whereas now we get the
"panic: attempt to copy freed scalar" instead.

It was agreed in this thread that it could be removed:

5 years agoConcise: improve hints decoding
David Mitchell [Fri, 19 Aug 2016 10:30:47 +0000 (11:30 +0100)]
Concise: improve hints decoding

Include the missing HINT_UNI_8_BIT (as 'us'), decode the feature bundle
bits (as fea=7) and display any unrecognised bits in hex rather than

This changes a nextstate following 'use feature "signatures"' from, to

    2     <;> nextstate(...) v:%,{,469762048 ->3
    2     <;> nextstate(...) v:%,{,fea=7 ->3

5 years agoConcise: use hex for some large constants
David Mitchell [Fri, 19 Aug 2016 08:04:52 +0000 (09:04 +0100)]
Concise: use hex for some large constants

5 years agotoke.c: Introduce peekspace()
Father Chrysostomos [Fri, 19 Aug 2016 05:27:42 +0000 (22:27 -0700)]
toke.c: Introduce peekspace()

This should make the sites that use LEX_NO_INCLINE a bit less arcane.
This has nothing to do with the erstwhile PEEKSPACE macro that existed
for MADness’ sake.

5 years agotoke.c: Note retval of S_skipspace
Father Chrysostomos [Fri, 19 Aug 2016 05:23:45 +0000 (22:23 -0700)]
toke.c: Note retval of S_skipspace

5 years agotoke.c: Move skipspace closer to S_skipspace
Father Chrysostomos [Fri, 19 Aug 2016 05:22:25 +0000 (22:22 -0700)]
toke.c: Move skipspace closer to S_skipspace

It was added back in 21791330a when we still had MADness.  Back then
there were about four skipspace functions, some of them before
S_update_debugger_info and some after, and I just put the #define
before all of them.  But now the only skipspace function left is
after S_update_debugger_info, so having the #define before it just
makes it harder to see what’s what.

5 years ago[perl #128951] Fix ASan error with @{\327
Father Chrysostomos [Thu, 18 Aug 2016 05:32:23 +0000 (22:32 -0700)]
[perl #128951] Fix ASan error with @{\327

By \327 I mean character number 327 in octal.

Without memory tools like ASan, it produces garbled output.  The added
test fails like this:

# Failed test 18 - @ { \327 \n - used to garble output (or fail asan) [perl \#128951] at ./ line 1058
#      got "Unrecognized character \\xD7; marked by <-- HERE after \x{a0}\x{f6}@3\x{a8}\x{7f}\000\000@{<-- HERE near column -1 at - line 1."
# expected "Unrecognized character \\xD7; marked by <-- HERE after @{<-- HERE near column 3 at - line 1."

Dave Mitchell’s explanation from the RT ticket:
> The src code contains the bytes:
>     @ { \327 \n
> after seeing "@{" the lexer calls scan_ident(), which sees the \327 as an
> ident, then calls S_skipspace_flags() to skip the spaces following the
> ident.  This moves the current cursor position to the \n, and since that's
> a line boundary, its updates PL_linestart and PL_bufptr to point to \n
> too.
> When it finds that the next char isn't a '}', it does this:
>             /* Didn't find the closing } at the point we expected, so restore
>                state such that the next thing to process is the opening { and */
>      s = SvPVX(PL_linestr) + bracket; /* let the parser handle it */
> i.e. it moves s back to the "{\317" then continues.
> However, PL_linestart doesn't get reset, so later when the parser
> encounters the \327 and tries to croak with "Unrecognized character %s ...",
> when it prints out the section of src code in error, since s < PL_linestr,
> negative string lengths and ASAN errors ensue.

This commit fixes it by passing the LEX_NO_INCLINE flag (added by
21791330a), which specifies that we are not trying to read past the
newline but simply peek ahead.  In that case lex_read_space does not
reset PL_linestart.

But that does cause problems with code like:

#line 3


because we end up jumping ahead via skipspace without updating the
line number.  So we need to do a skipspace_flags(..., LEX_NO_INCLINE)
first (i.e., peek ahead), and then when we know we don’t need to go
back again we can skipspace(...) for real.

5 years agoperldelta for the many hexfp fixes.
Jarkko Hietaniemi [Thu, 18 Aug 2016 23:19:17 +0000 (19:19 -0400)]
perldelta for the many hexfp fixes.

5 years agomagic-27839.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 23:40:54 +0000 (16:40 -0700)]
magic-27839.t miniperl fix-up

5 years agoincfilter.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 23:40:12 +0000 (16:40 -0700)]
incfilter.t miniperl fix-up

5 years agohash-rt85026.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 23:39:27 +0000 (16:39 -0700)]
hash-rt85026.t miniperl fix-up

5 years agogroups.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 23:38:44 +0000 (16:38 -0700)]
groups.t miniperl fix-up

5 years agogetpid.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 22:42:36 +0000 (15:42 -0700)]
getpid.t miniperl fix-up

5 years agodump.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 22:40:59 +0000 (15:40 -0700)]
dump.t miniperl fix-up

5 years agopat_advanced.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 22:40:18 +0000 (15:40 -0700)]
pat_advanced.t miniperl fix-up

5 years agoeintr.t miniperl fix-up
Father Chrysostomos [Thu, 18 Aug 2016 22:39:32 +0000 (15:39 -0700)]
eintr.t miniperl fix-up

5 years agosignatures: eliminate XSIGVAR, add KEY_sigvar
David Mitchell [Thu, 18 Aug 2016 08:53:11 +0000 (09:53 +0100)]
signatures: eliminate XSIGVAR, add KEY_sigvar

When I moved subroutine signature processing into perly.y with
v5.25.3-101-gd3d9da4, I added a new lexer PL_expect state, XSIGVAR.

This indicated, when about to parse a variable, that it was a signature
element rather than a my variable; in particular, it makes ($,...)
be toked as the lone sigil '$' rather than the punctuation variable '$,'.

However this is a bit heavy-handled; so instead this commit adds a
new allowed pseudo-keyword value to PL_in_my: as well as KEY_my, KEY_our and
KEY_state, it can now be KEY_sigvar. This is a less intrusive change
to the lexer.

5 years agoRevert threads-dirh.t part of 624c42e21
Father Chrysostomos [Thu, 18 Aug 2016 02:47:20 +0000 (19:47 -0700)]
Revert threads-dirh.t part of 624c42e21

async needs to be imported from at compile time for
async { ... } to compile correctly.

5 years agoTest data mistake was masked by mistaken fractional matching
Jarkko Hietaniemi [Mon, 15 Aug 2016 21:49:51 +0000 (17:49 -0400)]
Test data mistake was masked by mistaken fractional matching

(Affected only double-double.)

5 years agoDo not deploy the fractional matching without fractions
Jarkko Hietaniemi [Mon, 15 Aug 2016 21:52:17 +0000 (17:52 -0400)]
Do not deploy the fractional matching without fractions

5 years agoTest subnormals with quadmath
Jarkko Hietaniemi [Thu, 18 Aug 2016 01:37:07 +0000 (21:37 -0400)]
Test subnormals with quadmath

5 years agoDefine Perl_fp_class() for quadmath
Jarkko Hietaniemi [Thu, 18 Aug 2016 01:16:16 +0000 (21:16 -0400)]
Define Perl_fp_class() for quadmath

More importantly, define Perl_fp_class_denorm()
so that hexfp subnormals work with printf %a.

5 years agoHandle subnormals of x86 80-bit
Jarkko Hietaniemi [Mon, 15 Aug 2016 02:52:40 +0000 (22:52 -0400)]
Handle subnormals of x86 80-bit

5 years agoUse library testing for subnormality
Jarkko Hietaniemi [Sun, 14 Aug 2016 23:59:32 +0000 (19:59 -0400)]
Use library testing for subnormality

...instead of implementing it brokenly

Continuing work on #128843

5 years agoUse set_up_inc for several unit tests
Nicolas R [Thu, 18 Aug 2016 01:14:51 +0000 (11:14 +1000)]
Use set_up_inc for several unit tests

Use set_up_inc when is loaded
move plan outside of BEGIN block
when no tests are run at BEGIN time.

Using set_up_inc allow to run these tests under minitest
but also compile them using B::C.

This also has the advantage to use a single
control point for @INC setup.

Note: some tests cannot use 'require',
unshfit is then used for them.

5 years ago(perl #128954) improved hints for Hurd
Pino Toscano [Thu, 18 Aug 2016 00:05:36 +0000 (10:05 +1000)]
(perl #128954) improved hints for Hurd

(a) This enables the malloc wrap also on Hurd, as used on Linux
already; Perl's own test suite passed with it, and I see no reason to
diverge from the behaviour on Linux and kFreeBSD. I'm not sure whether
it affects the ABI though, so it might be safe only for the upcoming
perl 5.24 in experimental (since that breaks the ABI anyway)

(b) This improves the reporting of the GNU libc used, so it's shown in
`perl -V` (as libc value, instead of the currently empty string).

5 years agoutf8.c: Remove an EBCDIC-only path
Karl Williamson [Thu, 11 Aug 2016 23:43:13 +0000 (17:43 -0600)]
utf8.c: Remove an EBCDIC-only path

Rewriting this slightly allows an #ifdef EBCDIC to be removed.

I am copying from code written by and included in the
Encode distribution.

5 years agoregexec.c: White-space only
Karl Williamson [Thu, 11 Aug 2016 22:53:58 +0000 (16:53 -0600)]
regexec.c: White-space only

5 years agolib/locale.t: Add some extra info to a debug statement
Karl Williamson [Thu, 11 Aug 2016 22:53:35 +0000 (16:53 -0600)]
lib/locale.t: Add some extra info to a debug statement

5 years agolib/locale.t: Generalize test
Karl Williamson [Thu, 11 Aug 2016 22:49:57 +0000 (16:49 -0600)]
lib/locale.t: Generalize test

To test for cased letters, we need to include lower as well as upper,
folded.  I happen to know that internally currently, this doesn't make a
difference, but the test should still be written so it will work
properly if that were to change.

5 years agoTake advantage of SvGROW's return value
Karl Williamson [Thu, 11 Aug 2016 22:42:20 +0000 (16:42 -0600)]
Take advantage of SvGROW's return value

I had not realized that SvGROW returned the new string pointer.  Using
that makes a one-step process from a two-step process.

I examined the code for other possible occurrences, and found others
where it seemed that the two-step seemed clearer, so left those alone.

5 years agoUpgrade Time::Local from version 1.2300 to 1.24
Steve Hay [Wed, 17 Aug 2016 12:42:39 +0000 (13:42 +0100)]
Upgrade Time::Local from version 1.2300 to 1.24

5 years agoUpgrade Test::Simple from version 1.302049 to 1.302052
Steve Hay [Wed, 17 Aug 2016 12:38:12 +0000 (13:38 +0100)]
Upgrade Test::Simple from version 1.302049 to 1.302052

5 years agoUpgrade HTTP::Tiny from version 0.058_001 to 0.064
Steve Hay [Wed, 17 Aug 2016 12:34:12 +0000 (13:34 +0100)]
Upgrade HTTP::Tiny from version 0.058_001 to 0.064

5 years agoUpgrade File::Fetch from version 0.50 to 0.52
Steve Hay [Wed, 17 Aug 2016 12:27:05 +0000 (13:27 +0100)]
Upgrade File::Fetch from version 0.50 to 0.52

5 years agoRemove dead code in pp.c:pp_index
Father Chrysostomos [Wed, 17 Aug 2016 05:15:01 +0000 (22:15 -0700)]
Remove dead code in pp.c:pp_index

8df0e7a28b changed

/* One needs to be upgraded.  */
if (little_utf8) {


/* One needs to be upgraded.  */
if (little_utf8 && !IN_ENCODING) {

The ‘else’ branch of that ‘if’ has some code conditional on
little_utf8 being true, which could only happen before in the case of
PL_encoding being set, and which cannot happen any more.

5 years agoperldelta for #126482 / c82de78e3ba
Father Chrysostomos [Tue, 16 Aug 2016 18:25:03 +0000 (11:25 -0700)]
perldelta for #126482 / c82de78e3ba

5 years agoTest that the lexer does not upgrade constants
Father Chrysostomos [Tue, 16 Aug 2016 18:22:46 +0000 (11:22 -0700)]
Test that the lexer does not upgrade constants

Make sure that if two barewords occur in a row the lexer does not
upgrade the corresponding symbol table entries into full GVs.

c82de78e was a bug fix, but it also made things more efficient.
Test that we do not lose that efficiency by mistake.

5 years agoMove a recently-added test
Father Chrysostomos [Tue, 16 Aug 2016 18:14:51 +0000 (11:14 -0700)]
Move a recently-added test

It’s not really a method test (no method call is involved, but a check
to see whether the code might compile to a method call), but a lexer

5 years agoav_fetch(): use less branches.
David Mitchell [Wed, 17 Aug 2016 11:06:27 +0000 (12:06 +0100)]
av_fetch(): use less branches.

The code that handles negative array indexes and out-of-bounds
negative indices used to require:

    2 conditions for a +ve index
    3 conditions for a -ve index

After this commit, for the common case where the index is in bounds,
it requires a single condition regardless of sign. For the less common
case of out-of-bounds, it requires 2 conditions.

Also, the one condition is more branch-predict friendly - it's whether
the index is in bounds or not. Previously the first test was whether
key < 0, and in code that does mixed signs, such as $a[0] + $a[-1],
branch prediction could be tricky.

It achieves this at the expense of a more complex expression for the key.

5 years agoav_fetch(): sprinkle UNLIKELY()
David Mitchell [Wed, 17 Aug 2016 10:18:46 +0000 (11:18 +0100)]
av_fetch(): sprinkle UNLIKELY()

5 years agoav_fetch(): optimise the negative index branch.
David Mitchell [Wed, 17 Aug 2016 08:59:06 +0000 (09:59 +0100)]
av_fetch(): optimise the negative index branch.

For a negative index one conditional is redundant, since after determining
that key < 0 and recomputing key as (AvFILLp(av) - key), key can't
be > AvFILLp(av).

5 years agoav_fetch(): use AvFILLp rather than AvFILL
David Mitchell [Wed, 17 Aug 2016 08:52:48 +0000 (09:52 +0100)]
av_fetch(): use AvFILLp rather than AvFILL

The point in the code which uses AvFILL will never be reached if the array
is tied, so use AvFILLp insead, which directly accesses the xav_fill

This only affects the $a[-N] branch: the $a[+N] branch already uses

5 years agoCoverity CID #152143: annotate switch fallthru.
Jarkko Hietaniemi [Wed, 17 Aug 2016 11:18:03 +0000 (07:18 -0400)]
Coverity CID #152143: annotate switch fallthru.

5 years agoav_fetch(): remove redundant condition
David Mitchell [Wed, 17 Aug 2016 08:01:44 +0000 (09:01 +0100)]
av_fetch(): remove redundant condition

At the point of testing for !AvARRAY(av)[key] if AvREIFY(av), it's already
been confirmed that the array element isn't null.

5 years agoadd any_op field to the ANY savestack union
David Mitchell [Wed, 17 Aug 2016 06:52:57 +0000 (07:52 +0100)]
add any_op field to the ANY savestack union

This is an attempt to silence a (probably spurious) Coverity warning.

5 years agoThe 48c0e89d broke minitest by unconditional use Hash::Util.
Jarkko Hietaniemi [Wed, 17 Aug 2016 01:56:43 +0000 (21:56 -0400)]
The 48c0e89d broke minitest by unconditional use Hash::Util.

5 years agoperldelta for dd1dbff0
Jarkko Hietaniemi [Wed, 17 Aug 2016 00:34:49 +0000 (20:34 -0400)]
perldelta for dd1dbff0

5 years agoCoverity CID #15149: Missing varargs init or cleanup
Jarkko Hietaniemi [Tue, 16 Aug 2016 23:15:50 +0000 (19:15 -0400)]
Coverity CID #15149: Missing varargs init or cleanup

The return was returning after va_start but before va_end.

5 years agoRevert "Check against negative uid/gid for fchown()."
Jarkko Hietaniemi [Tue, 16 Aug 2016 23:06:31 +0000 (19:06 -0400)]
Revert "Check against negative uid/gid for fchown()."

This reverts commit f95ba548a286b17c260cc168715a9d0d441b14a6.

[ #128967]

The negative arguments to fchown depend on the platform,
so Coverity should not claim it knows what is acceptable.

5 years ago[perl #126482] Fix assert fail ‘a_const a_const’
Father Chrysostomos [Tue, 16 Aug 2016 01:09:17 +0000 (18:09 -0700)]
[perl #126482] Fix assert fail ‘a_const a_const’

Mentioning a constant twice in a row results in an assertion failure:

$ ./miniperl -e 'sub ub(){0} ub ub'
Assertion failed: (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM), function Perl_cv_const_sv_or_av, file op.c, line 7926.
Abort trap: 6

A bisect points to 2eaf799e7, but I don’t understand why that commit
introduced it.  I suspect it was failing an assertion for a slightly
different reason back then, but am too lazy to check.

In any case, it fails now because, while ‘ub ub’ is being compiled,
when the sub is looked up initially (in toke.c:yylex), we call
rv2cv_op_cv with the RV2GVOPCV_RETURN_STUB flag, which allows a
bare constant ref to be returned.  So the ‘cv’ variable contains
an RV (\0):

    cv = lex
? isGV(gv)
    ? GvCV(gv)
    : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
? (CV *)SvRV(gv)
: ((CV *)gv)
: rv2cv_op_cv(rv2cv_op, RV2CVOPCV_RETURN_STUB);

(‘ub’ here is a constant 0, which is stored in the symbol table as
\0; i.e., ‘sub ub(){0}’ is equivalent to ‘BEGIN { $::{ub} = \0 }’.)

Then if we see a word immediately following it (the second ‘ub’) we
check a little further down to see whether it might be a method call.
That entails calling intuit_method, which does this:

indirgv = gv_fetchpvn_flags(tmpbuf, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVCV);
if (indirgv && GvCVu(indirgv))
    return 0;

So we are looking to see whether the second word refers to a sub and
deciding this is not an indirect method call if there is a sub.

But calling gv_fetchpvn_flags like that has the effect of upgrading
the symbol table entry to a full GV.  Since the ‘cv’ variable in yylex
points to that symbol table entry, it ends up pointing to a GV, which
certain code later on does not expect to happen.

So we should pass the GV_NOADD_NOINIT flag to gv_fetchpvn_flags to
prevent lookup of the second bareword from upgrading the entry (we
already do that earlier in intuit_method for the first bareword).  We
only check the GV to see whether it has a sub or io thingy in it any-
way, so we don’t actually need a full GV.  (As a bonus, GvIO will
already work on a non-GV and return NULL, so that part of the code
remains unchanged.)

5 years agobuffer overflow in "string terminator" err msg
David Mitchell [Tue, 16 Aug 2016 12:50:46 +0000 (13:50 +0100)]
buffer overflow in "string terminator" err msg

RT #128952

    eval "q" . chr(100000000064);

generating the error message C<Can't find string terminator "XXX"'>
was overrunning a buffer designed to hold a single utf8 char, since
it wasn't allowing for the \0 at the end.

5 years agoperldelta for e94ea821c9
Father Chrysostomos [Tue, 16 Aug 2016 01:09:17 +0000 (18:09 -0700)]
perldelta for e94ea821c9

5 years agoperldelta for #128740 / d35c1b5e4
Father Chrysostomos [Tue, 16 Aug 2016 01:07:43 +0000 (18:07 -0700)]
perldelta for #128740 / d35c1b5e4

5 years agoperldelta for 10030f4b9
Father Chrysostomos [Tue, 16 Aug 2016 01:03:43 +0000 (18:03 -0700)]
perldelta for 10030f4b9

5 years agoperldelta for 7bb33634741
Father Chrysostomos [Tue, 16 Aug 2016 01:00:08 +0000 (18:00 -0700)]
perldelta for 7bb33634741

5 years agoperldelta for b199a3980
Father Chrysostomos [Tue, 16 Aug 2016 00:58:12 +0000 (17:58 -0700)]
perldelta for b199a3980

5 years agoperldelta for #128701 / cb65013574
Father Chrysostomos [Tue, 16 Aug 2016 00:54:29 +0000 (17:54 -0700)]
perldelta for #128701 / cb65013574

5 years agoXS::APItest: Note why we do not want efficiency
Father Chrysostomos [Mon, 15 Aug 2016 04:36:39 +0000 (21:36 -0700)]
XS::APItest: Note why we do not want efficiency

5 years ago"" . open(my $fh,...) gave wrong warning
David Mitchell [Mon, 15 Aug 2016 10:39:11 +0000 (11:39 +0100)]
"" . open(my $fh,...) gave wrong warning

RT #128940

    $ perl -we 'print "" . open my $fh, "<", "no / such / file"'
    Use of uninitialized value $fh in concatenation (.) or string at -e line 1.

5 years agoperldelta: @a = sort @a fix
David Mitchell [Mon, 15 Aug 2016 08:36:22 +0000 (09:36 +0100)]
perldelta: @a = sort @a fix

5 years agoHash-Util/Util.xs: silence compiler warnings
David Mitchell [Mon, 15 Aug 2016 08:17:52 +0000 (09:17 +0100)]
Hash-Util/Util.xs: silence compiler warnings

    Util.c: In function ‘XS_Hash__Util_bucket_ratio’:
    Util.c:638:7: warning: unused variable ‘RETVAL’ [-Wunused-variable]
      SV * RETVAL;

Don't declare a return type if we're not going to use it.

5 years agosilence warning in Opcode.xs
David Mitchell [Mon, 15 Aug 2016 07:55:06 +0000 (08:55 +0100)]
silence warning in Opcode.xs

Opcode.xs:71:21: warning: overflow in implicit constant conversion [-Woverflow]
     bitmap[len-1] = (PL_maxo & 0x07) ? ~(0xFF << (PL_maxo & 0x07)) : 0xFF;

This was due to to PL_maxo being converted from a var into a const value
in a previous commit.

5 years agoRevert "#define PERL_NO_GET_CONTEXT in XS::APItest"
Father Chrysostomos [Mon, 15 Aug 2016 02:00:16 +0000 (19:00 -0700)]
Revert "#define PERL_NO_GET_CONTEXT in XS::APItest"

This reverts commit 6b6b24f11907f607277fd8cf6f08264c234cc693.

In <> Daniel
Dragan writes:
> If there is 1 module that shouldn't use PERL_NO_GET_CONTEXT XS::APItest
> is the one. *Ideally* in perl core, there is nothing else to test that
> Get-context-everywhere mode works since no production core module would
> be that bitrotten to not use PERL_NO_GET_CONTEXT. I thought about adding
> PERL_NO_GET_CONTEXT XS::APItest 2 years ago and decided against it to
> make sure there is a test in core that get-context-everywhere
> back-compat mode works.

5 years agoRe-order intrp struct
Father Chrysostomos [Sun, 14 Aug 2016 08:12:19 +0000 (01:12 -0700)]
Re-order intrp struct

5 years agoRemove PL_maxo
Father Chrysostomos [Sun, 14 Aug 2016 08:11:07 +0000 (01:11 -0700)]
Remove PL_maxo

We have an interpreter variable using memory, PL_maxo, which is
defined to be the same as MAXO, a #defined constant.  As far as I can
tell, it is never used in lvalue context, in core or on CPAN, except
for the initialisation in intrpvar.h.

It can simply be removed and replaced with a macro defined as equiva-
lent to MAXO.

It was added in this commit:

commit 84ea024ac9cdf20f21223e686dddea82d5eceb4f
Author: Perl 5 Porters <>
Date:   Tue Jan 2 23:21:55 1996 +0000

    perl 5.002beta1h patch: perl.h

    5.002beta1 attempted some memory optimizations, but unfortunately
    they can result in a memory leak problem.  This can be
    avoided by #define STRANGE_MALLOC.  I do that here until
    consensus is reached on a better strategy for handling the
    memory optimizations.

    Include maxo for the maximum number of operations (needed
    for the Safe extension).

But apparently it is not needed for the Safe extension (tests pass
without it).

5 years ago#define PERL_NO_GET_CONTEXT in XS::APItest
Father Chrysostomos [Sun, 14 Aug 2016 07:52:36 +0000 (00:52 -0700)]
#define PERL_NO_GET_CONTEXT in XS::APItest

We want efficiency.  But more importantly, we want to be able to see
errors in the output, without them getting drowned by:

APItest.xs:197: warning: unused parameter ‘my_perl’
APItest.xs:242: warning: unused parameter ‘my_perl’
APItest.xs:327: warning: unused parameter ‘my_perl’
APItest.xs:341: warning: unused parameter ‘my_perl’
APItest.xs:362: warning: unused parameter ‘my_perl’
APItest.xs:376: warning: unused parameter ‘my_perl’
APItest.xs:390: warning: unused parameter ‘my_perl’
APItest.xs:400: warning: unused parameter ‘my_perl’
APItest.xs:410: warning: unused parameter ‘my_perl’
APItest.xs:426: warning: unused parameter ‘my_perl’
APItest.xs:446: warning: unused parameter ‘my_perl’
APItest.xs:466: warning: unused parameter ‘my_perl’
APItest.xs:474: warning: unused parameter ‘my_perl’
APItest.xs:488: warning: unused parameter ‘my_perl’
APItest.xs:553: warning: unused parameter ‘my_perl’
APItest.xs:564: warning: unused parameter ‘my_perl’
APItest.xs:576: warning: unused parameter ‘my_perl’
APItest.xs:606: warning: unused parameter ‘my_perl’
APItest.xs:620: warning: unused parameter ‘my_perl’
APItest.xs:632: warning: unused parameter ‘my_perl’
APItest.xs:654: warning: unused parameter ‘my_perl’
APItest.xs:672: warning: unused parameter ‘my_perl’
APItest.xs:754: warning: unused parameter ‘my_perl’
APItest.xs:782: warning: unused parameter ‘my_perl’
APItest.xs:851: warning: unused parameter ‘my_perl’
APItest.xs:866: warning: unused parameter ‘my_perl’
APItest.xs:883: warning: unused parameter ‘my_perl’
APItest.xs:904: warning: unused parameter ‘my_perl’
APItest.xs:915: warning: unused parameter ‘my_perl’
APItest.xs:922: warning: unused parameter ‘my_perl’
APItest.xs:937: warning: unused parameter ‘my_perl’
APItest.xs:946: warning: unused parameter ‘my_perl’
APItest.xs:962: warning: unused parameter ‘my_perl’
APItest.xs:969: warning: unused parameter ‘my_perl’
APItest.xs:978: warning: unused parameter ‘my_perl’
APItest.xs:989: warning: unused parameter ‘my_perl’
APItest.xs:995: warning: unused parameter ‘my_perl’
APItest.xs:1001: warning: unused parameter ‘my_perl’
APItest.xs:1007: warning: unused parameter ‘my_perl’
APItest.xs:1013: warning: unused parameter ‘my_perl’
APItest.xs:1019: warning: unused parameter ‘my_perl’
APItest.xs:1034: warning: unused parameter ‘my_perl’
APItest.xs:1040: warning: unused parameter ‘my_perl’
APItest.xs:1050: warning: unused parameter ‘my_perl’
APItest.xs:1124: warning: unused parameter ‘my_perl’
APItest.xs:1136: warning: unused parameter ‘my_perl’
APItest.xs:1146: warning: unused parameter ‘my_perl’
APItest.xs:1237: warning: unused parameter ‘my_perl’
APItest.xs:1243: warning: unused parameter ‘my_perl’
APItest.xs:1251: warning: unused parameter ‘my_perl’

g++ likes to warn about unused parameters.

5 years agoTest call_argv
Father Chrysostomos [Sun, 14 Aug 2016 07:41:19 +0000 (00:41 -0700)]
Test call_argv

5 years agoautomatically detect GCC vs VC and set VC ver number on Win32
Daniel Dragan [Sun, 14 Aug 2016 08:34:37 +0000 (04:34 -0400)]
automatically detect GCC vs VC and set VC ver number on Win32

This fixes a bug, if you use gmake, without a GCC in PATH (but you do have
a VC in PATH) GNUMakefile is unusable because target info fatally errors.
I usually keep a strawberry perl's /c/bin dir in PATH for dmake and gmake
on my VC builds, but in 1 build config, I installed gmake to my C:/Windows
dir and did not have SP's /c/bin dir in my PATH, so GNUMakefile was broken
in that case. This patch fixes the bug.

-move the gcc -dumpversion shell outs to the GCC only section in both mkfs
 dont run gcc -dumpversion on a VC build
-dont have a default CCTYPE anymore, autodetect it, if user supplies CCTYPE
 explicitly on cmd line to make tool, then dont do autodetection (its
 faster by 50-100ms to manually specify CCTYPE not call gcc.exe and cl.exe
 with the auto detect code), "FREE" detection is unimplemented but seems
 to make no difference with VC except for an old rare "free" VC 2003
 I personally use a paid VC 2003.
-silence console messages and warnings from a missing gcc.exe causing
 "gcc -dumpmachine" to warn or fatally error, gmake doesn't care about
 exit code, dmake does
-on dmake, use := instead of *= or =, otherwise the long for loop shell
 line runs dozens of times (multiple eval problem)
-on dmake, since GCCBIN macro doesn't exist and dmake mfk is "simpler"
 than gmake just call gcc.exe always and not a prefixed version of GCC for
 the GCCTARGET macro, it isn't used outside the autodetection code anyways
 and if a user neglected to specify CCTYPE it is assumed they neglected to
 specify GCCCROSS too

5 years agolocale.c: Add missing '{'
Karl Williamson [Sun, 14 Aug 2016 15:59:11 +0000 (09:59 -0600)]
locale.c: Add missing '{'

Spotted by bulk88,

5 years agosilence MSVC warnings for NATIVE_UTF8_TO_I8/I8_TO_NATIVE_UTF8
Daniel Dragan [Sun, 14 Aug 2016 15:01:00 +0000 (11:01 -0400)]
silence MSVC warnings for NATIVE_UTF8_TO_I8/I8_TO_NATIVE_UTF8

The result of I8_TO_NATIVE_UTF8 has to be U8 casted for the MSVC specific
PERL_SMALL_MACRO_BUFFER option just like it is for newer CCs that dont
have a small CPP buffer. Commit 1a3756de64/#127426 did add U8 casts to
NATIVE_UTF8_TO_I8/I8_TO_NATIVE_UTF8. This commit fixes that.

One example of the C4244 warning is VC6 thinks 0xFF & (0xFE << 6) in
UTF_START_MARK could be bigger than 0xff (a char), fixes
..\inline.h(247) : warning C4244: '=' : conversion from 'long ' to
'unsigned char ', possible loss of data

Also fixes
..\utf8.c(146) : warning C4244: '=' : conversion from 'UV' to 'U8',
possible loss of data
and alot more warnings in utf8.c

5 years agoFollow-up on a149d118.
Jarkko Hietaniemi [Sun, 14 Aug 2016 14:16:55 +0000 (10:16 -0400)]
Follow-up on a149d118.

The added tests were meant only for x86-80-bit long doubles,
but were accidentally run also on 128-bit doubles (quadmath,
or probably also on true IEEE 754 quadruples).

5 years agofirst step to documenting the Internals namespace
Yves Orton [Sun, 14 Aug 2016 11:56:56 +0000 (13:56 +0200)]
first step to documenting the Internals namespace

After discussion, we have decided to document Internals. This is a
first step doing so, with lib/Internals.pod. At the same time I
updated sv.h that there were equivalents for SvREFCNT and SvREADONLY
in the Internals namespace, this required adding docs for SvREADONLY.

I also tweaked the test name in Porting/
so that it pointed at Porting/ to make it more obvious
how to specify a maintainer for a new file.

5 years agoMove hash introspection routines into Hash::Util/Util.xs and out of universal.c
Yves Orton [Mon, 8 Aug 2016 18:06:01 +0000 (20:06 +0200)]
Move hash introspection routines into Hash::Util/Util.xs and out of universal.c

5 years agos/XS_hash_util_/XS_Hash_Util_/g
Yves Orton [Mon, 8 Aug 2016 17:48:01 +0000 (19:48 +0200)]

5 years agomove a declaration so that the Internals:: functions are grouped together
Yves Orton [Mon, 8 Aug 2016 17:35:49 +0000 (19:35 +0200)]
move a declaration so that the Internals:: functions are grouped together

5 years agomove Internals::hv_clear_placeholders() to Hash::Util::_clear_placeholders()
Yves Orton [Mon, 8 Aug 2016 16:53:20 +0000 (18:53 +0200)]
move Internals::hv_clear_placeholders() to Hash::Util::_clear_placeholders()

There is no reason for this code to be in Internals:: or in universal.c at
all, it should only be used from Hash::Util during things like lock_keys().

Moves the function to the XS code in Hash::Util, and renames it as well,
along with commented out documentation for what it does.

5 years ago[perl #128919] limited exponent range in hex fp literal with long double
Jarkko Hietaniemi [Sat, 13 Aug 2016 23:13:58 +0000 (19:13 -0400)]
[perl #128919] limited exponent range in hex fp literal with long double

5 years agoperldiag: Rewrap an entry for better splain output
Father Chrysostomos [Sat, 13 Aug 2016 21:30:56 +0000 (14:30 -0700)]
perldiag: Rewrap an entry for better splain output

In an eighty-column terminal, this is what it looked like before
this commit:

$ ./perl -Ilib -Mdiagnostics -E 'state ($x)=1'
Initialization of state variables in list context currently forbidden at -e line 1, at EOF
Execution of -e aborted due to compilation errors (#1)
    (F) state only permits initializing a single scalar variable, in scalar
    context. So state $a = 42 is allowed, but not state ($a) = 42. To apply
    state semantics to a hash or array, store a hash or array reference in a sca

5 years agoRemove claim that state @a will be supported
Smylers [Fri, 12 Aug 2016 15:34:17 +0000 (16:34 +0100)]
Remove claim that state @a will be supported

perldiag doesn't seem to be the right place to announce future changes to
Perl, especially since this claim was made 9 years ago, in 6dbe9451, and
doesn't show any sign of becoming true.

5 years agoMore AUTHORS sorting
Father Chrysostomos [Fri, 12 Aug 2016 22:28:35 +0000 (15:28 -0700)]
More AUTHORS sorting

5 years agoAvoid test noise on non-longdouble.
Jarkko Hietaniemi [Fri, 12 Aug 2016 23:08:56 +0000 (19:08 -0400)]
Avoid test noise on non-longdouble.

5 years ago[ #128909] printf %a mishandles exponent-crossing rounding with long double
Jarkko Hietaniemi [Fri, 12 Aug 2016 21:36:58 +0000 (17:36 -0400)]
[ #128909] printf %a mishandles exponent-crossing rounding with long double

5 years agoBogus skip count.
Jarkko Hietaniemi [Fri, 12 Aug 2016 21:30:25 +0000 (17:30 -0400)]
Bogus skip count.

Didn't break anything but still bogus.

5 years agouniversal.c:XS_re_regnames_count: redundant code
Father Chrysostomos [Fri, 12 Aug 2016 21:35:33 +0000 (14:35 -0700)]
universal.c:XS_re_regnames_count: redundant code

If we croak when items != 0, then SP -= items is a no-op, as is PUTBACK.

5 years agoscope.c: Appease C++
Father Chrysostomos [Fri, 12 Aug 2016 15:43:39 +0000 (08:43 -0700)]
scope.c: Appease C++

C++ is dumb.

5 years agogv.c:require_tie_mod: Make var name a char param
Father Chrysostomos [Fri, 12 Aug 2016 15:37:37 +0000 (08:37 -0700)]
gv.c:require_tie_mod: Make var name a char param

This reduces machine code size a little and simplifies

On a non-debugging Linux GCC build with -O2:

$ ls -l gv.o
-rw-r--r-- 1 sprout p5p 88704 Aug 12 07:29 gv.o

$ ls -l gv.o
-rw-r--r-- 1 sprout p5p 88656 Aug 12 17:29 gv.o

5 years agoperlcall: Remove redundant dSP
Father Chrysostomos [Fri, 12 Aug 2016 15:31:43 +0000 (08:31 -0700)]
perlcall: Remove redundant dSP

call_argv does not use a stack pointer.  This example has had the
redundant dSP since perl 5.000, presumably due to copying and
pasting from another example.

5 years agoTest new hexfp fixes also on (x86 80-bit) long doubles.
Jarkko Hietaniemi [Fri, 12 Aug 2016 12:12:41 +0000 (08:12 -0400)]
Test new hexfp fixes also on (x86 80-bit) long doubles.

5 years agoleave_scope(): combine the SAVEt_*PTR branches
David Mitchell [Fri, 12 Aug 2016 11:59:14 +0000 (12:59 +0100)]
leave_scope(): combine the SAVEt_*PTR branches

They're all the same, except for casts between different pointer types.

5 years agoleave_scope(): eliminate a couple of local vars
David Mitchell [Fri, 12 Aug 2016 11:33:08 +0000 (12:33 +0100)]
leave_scope(): eliminate a couple of local vars

Remove svp and i from the main loop and only declare them in the
inner scopes that require them. Where values get passing around in
goto restore_sv/restore_svp, pass the value in an unused a0/a2 var

Also eliminate the one use of the 'type' var within the loop - that way
the compiler doesn't have to hang on the value when executing the switch.

Makes the object code a bit smaller.