[perl.git] branch blead, updated. v5.25.3-319-gc8fbf4a

2016-08-19 Thread Father Chrysostomos
In perl.git, the branch blead has been updated



- Log -
commit c8fbf4a0405c1b43d860af2d332b5193efe24706
Author: Father Chrysostomos 
Date:   Fri Aug 19 22:22:21 2016 -0700

podcheck.t: Send helpful error output to stderr

While we do try to keep stderr clean for tests, that is for *passing*
tests.  If the diagnostic output goes to stdout instead, then nobody
gets to see it for ‘make test’, which means that the script has to
be re-run by itself just to find out what failed.  Since this is a
long-running test, that is quite inconvenient.

Also mention which .t the output is coming from.
---

Summary of changes:
 t/porting/podcheck.t | 20 
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/t/porting/podcheck.t b/t/porting/podcheck.t
index f0c3990..a6c8528 100644
--- a/t/porting/podcheck.t
+++ b/t/porting/podcheck.t
@@ -531,16 +531,20 @@ sub suppressed {
 last SKIP;
 }
 
-sub note {
-my $message = shift;
+sub _note {
+my ($andle, $message) = @_;
 
 chomp $message;
 
-print $message =~ s/^/# /mgr;
-print "\n";
+print $andle $message =~ s/^/# /mgr;
+print $andle "\n";
 return;
 }
 
+sub note { unshift @_, \*STDOUT; goto &_note }
+
+sub diag { unshift @_, \*STDERR; goto &_note }
+
 END {
 if ($planned && $planned != $current_test) {
 print STDERR
@@ -2133,7 +2137,7 @@ foreach my $filename (@files) {
 }
 ok(@diagnostics == $thankful_diagnostics, $output);
 if (@diagnostics) {
-note(join "", @diagnostics,
+diag(join "", @diagnostics,
 "See end of this test output for your options on silencing this");
 }
 
@@ -2165,7 +2169,7 @@ if (%files_with_unknown_issues) {
 : "were $were_count_files files";
 my $message = <

[perl.git] branch blead, updated. v5.25.3-318-gbc7bbd3

2016-08-19 Thread Father Chrysostomos
In perl.git, the branch blead has been updated



- Log -
commit bc7bbd314b9de6da4e0b8bf6a3c1ced7645acc76
Author: Father Chrysostomos 
Date:   Fri Aug 19 22:10:57 2016 -0700

perldelta for #128951 / bf8a9a15

M   pod/perldelta.pod

commit 24c341f279028661b19077eb6c0e12df2fbe
Author: Father Chrysostomos 
Date:   Fri Aug 19 22:08:14 2016 -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{10027} no longer suppresses regexep interpolation,
for instance.

M   pod/perldelta.pod
---

Summary of changes:
 pod/perldelta.pod | 13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index c182040..3f01895 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -424,11 +424,20 @@ fixed. [perl #128686].
 
 =item *
 
-Use of a string delimiter whose code point is above 2**32 is now
-supported on platforms that allow this.  Note that this is non-portable,
+Use of a string delimiter whose code point is above 2**31 now works
+correctly on platforms that allow this.  Previously, certain characters,
+due to truncation, would be confused with other delimiter characters
+with special meaning (such as C in C), resulting
+in inconsistent behaviour.  Note that this is non-portable,
 and is based on Perl's extension to UTF-8, and is probably not
 displayable nor enterable by any editor. [perl #128738]
 
+=item *
+
+C<@{x> followed by a newline where C represents a control or non-ASCII
+character no longer produces a garbled syntax error message or a crash.
+[perl #128951]
+
 =back
 
 =head1 Known Problems

--
Perl5 Master Repository


[perl.git] branch blead, updated. v5.25.3-316-gb6e9e11

2016-08-19 Thread James Keenan
In perl.git, the branch blead has been updated



- Log -
commit b6e9e118a4133eb96eb5e5de209ea6a37fd15bfe
Author: Karen Etheridge 
Date:   Thu Aug 18 12:47:41 2016 -0700

always use the core serializers in EUMM for core tests

M   cpan/ExtUtils-MakeMaker/t/min_perl_version.t
M   cpan/ExtUtils-MakeMaker/t/several_authors.t

commit 20dbe1c7dfa1982373fd6506d893439d0de91db0
Author: Karen Etheridge 
Date:   Thu Aug 18 11:35:11 2016 -0700

regenerate META.* using new CPAN::Meta, and always use the core serializers

M   META.json
M   META.yml
M   Porting/makemeta

commit c4159eb1857da384b4da75beaa2bf70d846837dd
Author: Karen Etheridge 
Date:   Fri Aug 19 19:24:49 2016 -0400

Changes manually performed for one file.

cpan/CPAN-Meta/Lib/CPAN/Meta.pm 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

M   cpan/CPAN-Meta/lib/CPAN/Meta.pm

commit 72447efac72ce7c46e621d5b1f802364ecd575a8
Author: James E Keenan 
Date:   Fri Aug 19 19:45:33 2016 -0400

Manually remove file recalcitrant to 'git am'.

D   cpan/Parse-CPAN-Meta/corpus/BadMETA.yml

commit f33f0562d25702270132a7cd9a85866f61c34473
Author: Karen Etheridge 
Date:   Thu Aug 18 10:14:00 2016 -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

  [FIXED]

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

  [CHANGED]

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

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

  [FIXED]

  - 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)

  [ADDED]

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

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

  [FIXED]

  - 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)

  [FIXED]

  - 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.

  [TESTS]

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

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

  [SPEC]

  - Clarifies acceptable values for booleans

  - Cleaned up text and links of historical specs.

M   MANIFEST
M   Porting/Maintainers.pl
A   cpan/CPAN-Meta/corpus/BadMETA.yml
R100cpan/Parse-CPAN-Meta/corpus/CL018_yaml.meta 
cpan/CPAN-Meta/corpus/CL018_yaml.meta
R100cpan/Parse-CPAN-Meta/corpus/META-VR.json
cpan/CPAN-Meta/corpus/META-VR.json
R100cpan/Parse-CPAN-Meta/corpus/META-VR.yml 
cpan/CPAN-Meta/corpus/META-VR.yml
R100cpan/Parse-CPAN-Meta/corpus/bareyaml.meta   
cpan/CPAN-Meta/corpus/bareyaml.meta
R100cpan/Parse-CPAN-Meta/corpus/json.meta   cpan/CPAN-Meta/corpus/json.meta
R100cpan/Parse-CPAN-Meta/corpus/yaml.meta   cpan/CPAN-Meta/corpus/yaml.meta
M   cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/History.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/History/Meta_1_0.pod
M   cpan/CPAN-Meta/lib/CPAN/Meta/History/Meta_1_1.pod
M   cpan/CPAN-Meta/lib/CPAN/Meta/History/Meta_1_2.pod
M   cpan/CPAN-Meta/lib/CPAN/Meta/History/Meta_1_3.pod
M   cpan/CPAN-Meta/lib/CPAN/Meta/History/Meta_1_4.pod
M   cpan/CPAN-Meta/lib/CPAN/Meta/Merge.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm
M   cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm
R088cpan/Parse-CPAN-Meta/lib/Parse/CPAN/Meta.pm 
cpan/CPAN-Meta/lib/Parse/CPAN/Meta.pm
A   cpan/CPAN-Meta/t/README-data.txt
M   cpan/CPAN-Meta/t/converter-bad.t
M   cpan/CPAN-Meta/t/conver

[perl.git] branch blead, updated. v5.25.3-311-g4690a2e

2016-08-19 Thread Karl Williamson
In perl.git, the branch blead has been updated



- Log -
commit 4690a2e02d47daf03446be6bc0143d8aa16bdb9f
Author: Karl Williamson 
Date:   Fri Aug 19 14:17:42 2016 -0600

perldelta: Updates for 5.24

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

M   pod/perldelta.pod

commit c8247c27c13d1cf152398e453793a91916d2185d
Author: Karl Williamson 
Date:   Fri Aug 19 14:07:53 2016 -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 https://github.com/dankogai/p5-encode/issues/64

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
determined

M   Porting/Maintainers.pl
M   cpan/Encode/Encode.xs
M   t/porting/customized.dat
---

Summary of changes:
 Porting/Maintainers.pl   |  1 +
 cpan/Encode/Encode.xs| 50 
 pod/perldelta.pod| 18 +
 t/porting/customized.dat |  1 +
 4 files changed, 32 insertions(+), 38 deletions(-)

diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index a4e477a..1a59e09 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -408,6 +408,7 @@ use File::Glob qw(:case);
 'Encode' => {
 'DISTRIBUTION' => 'DANKOGAI/Encode-2.86.tar.gz',
 'FILES'=> q[cpan/Encode],
+'CUSTOMIZED'   => [ qw[ Encode.xs ] ],
 },
 
 'encoding::warnings' => {
diff --git a/cpan/Encode/Encode.xs b/cpan/Encode/Encode.xs
index 6b4fae9..222f39b 100644
--- a/cpan/Encode/Encode.xs
+++ b/cpan/Encode/Encode.xs
@@ -318,39 +318,6 @@ strict_utf8(pTHX_ SV* sv)
 return SvTRUE(*svp);
 }
 
-/*
- * https://github.com/dankogai/p5-encode/pull/56#issuecomment-231959126
- */
-#ifndef UNICODE_IS_NONCHAR
-#define UNICODE_IS_NONCHAR(c) ((c >= 0xFDD0 && c <= 0xFDEF) || (c & 0xFFFE) == 
0xFFFE)
-#endif
-
-static UV
-convert_utf8_multi_seq(U8* s, STRLEN len, bool strict)
-{
-UV uv;
-
-if (strict && len > 4)
-return 0;
-
-uv = NATIVE_TO_UTF(*s) & UTF_START_MASK(len);
-
-len--;
-s++;
-
-while (len--) {
-if (!UTF8_IS_CONTINUATION(*s))
-return 0;
-uv = UTF8_ACCUMULATE(uv, *s);
-s++;
-}
-
-if (strict && (UNICODE_IS_SURROGATE(uv) || UNICODE_IS_NONCHAR(uv) || uv > 
PERL_UNICODE_MAX))
-return 0;
-
-return uv;
-}
-
 static U8*
 process_utf8(pTHX_ SV* dst, U8* s, U8* e, SV *check_sv,
  bool encode, bool strict, bool stop_at_partial)
@@ -399,12 +366,19 @@ process_utf8(pTHX_ SV* dst, U8* s, U8* e, SV *check_sv,
 goto malformed_byte;
 }
 
-ulen = skip;
-uv = convert_utf8_multi_seq(s, skip, strict);
-if (uv == 0) {
+uv = utf8n_to_uvuni(s, e - s, &ulen,
+UTF8_CHECK_ONLY | (strict ? UTF8_ALLOW_STRICT :
+
UTF8_ALLOW_NONSTRICT)
+   );
+#if 1 /* perl-5.8.6 and older do not check UTF8_ALLOW_LONG */
+if (strict && uv > PERL_UNICODE_MAX)
+ulen = (STRLEN) -1;
+#endif
+if (ulen == (STRLEN) -1) {
 if (strict) {
-uv = convert_utf8_multi_seq(s, skip, 0);
-if (uv == 0)
+uv = utf8n_to_uvuni(s, e - s, &ulen,
+UTF8_CHECK_ONLY | 
UTF8_ALLOW_NONSTRICT);
+if (ulen == (STRLEN) -1)
 goto malformed_byte;
 goto malformed;
 }
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index d1fae22..c182040 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -411,6 +411,24 @@ floating point numbers (64-bit or 128-bit) and the x86 
80-bit
 point literals will give a warning about "exponent underflow".
 [perl #128843, #128889, #128890, #128893, #128909, #128919]
 
+=item *
+
+A regression in 5.24 with C when the code point was between
+128 and 255 has been fixed. [perl #128734].
+
+=item *
+
+A regression from the previous development release, 5.23.3, where
+compiling a regular expression could crash the interpreter has been
+fixed. [perl #128686].
+
+=item *
+
+Use of a string delimiter whose code point is above 2**32 is now
+supported on platforms that allow this.  Note that this is non-portable,
+and is based on Per

[perl.git] branch maint-votes, updated. 88a5b622955b47d7680db7d6aa1251682ee09c49

2016-08-19 Thread Sawyer X
In perl.git, the branch maint-votes has been updated



- Log -
commit 88a5b622955b47d7680db7d6aa1251682ee09c49
Author: Sawyer X 
Date:   Fri Aug 19 21:34:32 2016 +0200

Add the relevant fix for Perl #128972
---

Summary of changes:
 votes-5.24.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/votes-5.24.xml b/votes-5.24.xml
index 28b7c4d..4d5e0e6 100644
--- a/votes-5.24.xml
+++ b/votes-5.24.xml
@@ -116,6 +116,7 @@ the first one required manual backporting (available on 
request).
 
 
 
+
 
 
 

--
Perl5 Master Repository


[perl.git] branch blead, updated. v5.25.3-309-g675c73c

2016-08-19 Thread H.Merijn Brand
In perl.git, the branch blead has been updated



- Log -
commit 675c73ca278d0bfeffeeb2a3f4cdea82e8b8b8c4
Author: H.Merijn Brand 
Date:   Fri Aug 19 20:44:14 2016 +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

EXPECTED:
Filehandle STDOUT opened only for output at - line 3.
GOT:
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
---

Summary of changes:
 perl.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/perl.c b/perl.c
index 6618535..1ceed1c 100644
--- a/perl.c
+++ b/perl.c
@@ -621,8 +621,9 @@ perl_destruct(pTHXx)
 PerlIO *stdo = PerlIO_stdout();
 if (*stdo && PerlIO_flush(stdo)) {
 PerlIO_restore_errno(stdo);
-PerlIO_printf(PerlIO_stderr(), "Unable to flush stdout: %s",
-  Strerror(errno));
+if (errno)
+PerlIO_printf(PerlIO_stderr(), "Unable to flush stdout: %s",
+Strerror(errno));
 if (!STATUS_UNIX)
 STATUS_ALL_FAILURE;
 }

--
Perl5 Master Repository


[perl.git] branch blead, updated. v5.25.3-308-g9fb994b

2016-08-19 Thread Dave Mitchell
In perl.git, the branch blead has been updated



- Log -
commit 9fb994be1361ac6bc42256ee6a710159cf050ca5
Author: David Mitchell 
Date:   Fri Aug 19 11:39:20 2016 +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 };
f($$r);

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: <199608131528.raa25...@anna.in-berlin.de>

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:

http://nntp.perl.org/group/perl.perl5.porters/239082
---

Summary of changes:
 av.c | 5 -
 pp_hot.c | 2 +-
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/av.c b/av.c
index 8f8cda5..21828a9 100644
--- a/av.c
+++ b/av.c
@@ -288,11 +288,6 @@ Perl_av_fetch(pTHX_ AV *av, SSize_t key, I32 lval)
return lval ? av_store(av,key,newSV(0)) : NULL;
 }
 
-if (UNLIKELY(AvREIFY(av) && SvIS_FREED(AvARRAY(av)[key]))) {
-   /* eg. @_ could have freed elts */
-   AvARRAY(av)[key] = NULL;/* 1/2 reify */
-   goto emptyness;
-}
 return &AvARRAY(av)[key];
 }
 
diff --git a/pp_hot.c b/pp_hot.c
index 3f37ce4..a794fd5 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -830,7 +830,7 @@ PP(pp_aelemfast)
 /* inlined av_fetch() for simple cases ... */
 if (!SvRMAGICAL(av) && key >= 0 && key <= AvFILLp(av)) {
 sv = AvARRAY(av)[key];
-if (sv && !SvIS_FREED(sv)) {
+if (sv) {
 PUSHs(sv);
 RETURN;
 }

--
Perl5 Master Repository


[perl.git] branch blead, updated. v5.25.3-307-g7c2833f

2016-08-19 Thread Dave Mitchell
In perl.git, the branch blead has been updated



- Log -
commit 7c2833f3712a18fc511622f4d27d71a3ce8a3907
Author: David Mitchell 
Date:   Fri Aug 19 11:30:47 2016 +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
decimal.

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

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

M   ext/B/B/Concise.pm
M   ext/B/t/concise.t

commit 88cfd03084bcb0074ae3456926c87a84cbd3693f
Author: David Mitchell 
Date:   Fri Aug 19 09:04:52 2016 +0100

Concise: use hex for some large constants

M   ext/B/B/Concise.pm
---

Summary of changes:
 ext/B/B/Concise.pm | 48 +---
 ext/B/t/concise.t  | 20 +++-
 2 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/ext/B/B/Concise.pm b/ext/B/B/Concise.pm
index 26eb8c5..34efc2c 100644
--- a/ext/B/B/Concise.pm
+++ b/ext/B/B/Concise.pm
@@ -14,7 +14,7 @@ use warnings; # uses #3 and #4, since warnings uses Carp
 
 use Exporter (); # use #5
 
-our $VERSION   = "0.997";
+our $VERSION   = "0.998";
 our @ISA   = qw(Exporter);
 our @EXPORT_OK = qw( set_style set_style_standard add_callback
 concise_subref concise_cv concise_main
@@ -595,31 +595,43 @@ require B::Op_private;
 our %hints; # used to display each COP's op_hints values
 
 # strict refs, subs, vars
-@hints{2,512,1024,32,64,128} = ('$', '&', '*', 'x$', 'x&', 'x*');
+@hints{0x2,0x200,0x400,0x20,0x40,0x80} = ('$', '&', '*', 'x$', 'x&', 'x*');
 # integers, locale, bytes
-@hints{1,4,8,16} = ('i', 'l', 'b');
+@hints{0x1,0x4,0x8,0x10} = ('i', 'l', 'b');
 # block scope, localise %^H, $^OPEN (in), $^OPEN (out)
-@hints{256,131072,262144,524288} = ('{','%','<','>');
+@hints{0x100,0x2,0x4,0x8} = ('{','%','<','>');
 # overload new integer, float, binary, string, re
-@hints{4096,8192,16384,32768,65536} = ('I', 'F', 'B', 'S', 'R');
+@hints{0x1000,0x2000,0x4000,0x8000,0x1} = ('I', 'F', 'B', 'S', 'R');
 # taint and eval
-@hints{1048576,2097152} = ('T', 'E');
-# filetest access, UTF-8
-@hints{4194304,8388608} = ('X', 'U');
+@hints{0x10,0x20} = ('T', 'E');
+# filetest access, use utf8, unicode_strings feature
+@hints{0x40,0x80,0x800} = ('X', 'U', 'us');
 
-sub _flags {
-my($hash, $x) = @_;
+# pick up the feature hints constants.
+# Note that we're relying on non-API parts of feature.pm,
+# but its less naughty than just blindly copying those constants into
+# this src file.
+#
+require feature;
+
+sub hints_flags {
+my($x) = @_;
 my @s;
-for my $flag (sort {$b <=> $a} keys %$hash) {
-   if ($hash->{$flag} and $x & $flag and $x >= $flag) {
+for my $flag (sort {$b <=> $a} keys %hints) {
+   if ($hints{$flag} and $x & $flag and $x >= $flag) {
$x -= $flag;
-   push @s, $hash->{$flag};
+   push @s, $hints{$flag};
}
 }
-push @s, $x if $x;
+if ($x & $feature::hint_mask) {
+push @s, "fea=" . (($x & $feature::hint_mask) >> $feature::hint_shift);
+$x &= ~$feature::hint_mask;
+}
+push @s, sprintf "0x%x", $x if $x;
 return join(",", @s);
 }
 
+
 # return a string like 'LVINTRO,1' for the op $name with op_private
 # value $x
 
@@ -677,11 +689,6 @@ sub private_flags {
 return join ",", @flags;
 }
 
-sub hints_flags {
-my($x) = @_;
-_flags(\%hints, $x);
-}
-
 sub concise_sv {
 my($sv, $hr, $preferpv) = @_;
 $hr->{svclass} = class($sv);
@@ -1597,6 +1604,9 @@ string if this is not a COP. Here are the symbols used:
 X filetest access
 U utf-8
 
+us  use feature 'unicode_strings'
+fea=NNN feature bundle number
+
 =item B<#hintsval>
 
 The numeric value of the COP's hint flags, or an empty string if this is not
diff --git a/ext/B/t/concise.t b/ext/B/t/concise.t
index bb1056f..fe955d1 100644
--- a/ext/B/t/concise.t
+++ b/ext/B/t/concise.t
@@ -10,7 +10,7 @@ BEGIN {
 require 'test.pl'; # we use runperl from 'test.pl', so can't use 
Test::More
 }
 
-plan tests => 163;
+plan tests => 167;
 
 require_ok("B::Concise");
 
@@ -502,4 +502,22 @@ $end =~ s//$next/;
 
 like $out, qr/$end/, 'OP_AND->op_other points correctly';
 
+# test nextstate hints display
+
+{
+
+$out = runperl(
+switches => ["-MO=Concise"],
+prog => q{my $x; use strict; use warnings; $x++; use feature q(:5.11); 
$x++},
+stderr => 1,
+);
+
+my @hints = $out =~ /nextstate\([^)]+\) (.*) ->/g;
+
+is(scalar(@hints), 3, "3 hints");
+is($hints[0], 'v: