In perl.git, the branch abigail/deprecation has been updated <http://perl5.git.perl.org/perl.git/commitdiff/395d958ce6112333263a1dd16c0d7e111144105e?hp=fb847842d9aedf642a043677bf2b2a1af70f5646>
- Log ----------------------------------------------------------------- commit 395d958ce6112333263a1dd16c0d7e111144105e Author: Abigail <[email protected]> Date: Wed Nov 23 19:06:51 2016 +0100 Use of Unicode code points exceeding IV_MAX will be fatal in Perl 5.28 Changed the warning to reflect the deadline of this deprecation. Update tests, perldiag.pod and added a section to perldeprecation.pod. ----------------------------------------------------------------------- Summary of changes: pod/perldeprecation.pod | 17 +++++++++++++++++ pod/perldiag.pod | 5 ++++- t/lib/warnings/pp | 2 +- t/lib/warnings/utf8 | 16 ++++++++-------- utf8.c | 2 +- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pod/perldeprecation.pod b/pod/perldeprecation.pod index e91b6e9..cb41c2a 100644 --- a/pod/perldeprecation.pod +++ b/pod/perldeprecation.pod @@ -104,6 +104,23 @@ You are recommended to change your code to set C<$/> to C<undef> explicitly if you wish to slurp the file. +=head3 Limit on the value of Unicode code points. + +Unicode only allows code points up to 0x10FFFF, but Perl allows much +larger ones. However, using code points exceeding the maximum value +of an integer (C<IV_MAX>) may break the perl interpreter in some constructs, +including causing it to hang in a few cases. The known problem areas +are in C<tr///>, regular expression pattern matching using quantifiers, +as quote delimiters in C<qI<X>...I<X>> (where I<X> is the C<chr()> of a large +code point), and as the upper limits in loops. + +The use of out of range code points was deprecated in Perl 5.24, and +it will be a fatal error in Perl 5.28. + +If your code is to run on various platforms, keep in mind that the upper +limit depends on the platform. It is much larger on 64-bit word sizes +than 32-bit ones. + =head3 Use of C<\N{}> diff --git a/pod/perldiag.pod b/pod/perldiag.pod index b454c5d..d97fe7e 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -6902,7 +6902,7 @@ modifier is not presently meaningful in substitutions. use the /g modifier. Currently, /c is meaningful only when /g is used. (This may change in the future.) -=item Use of code point 0x%s is deprecated; the permissible max is 0x%s +=item Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28 (D deprecated) You used a code point that will not be allowed in a future perl version, because it is too large. Unicode only allows code @@ -6919,6 +6919,9 @@ If your code is to run on various platforms, keep in mind that the upper limit depends on the platform. It is much larger on 64-bit word sizes than 32-bit ones. +The use of out of range code points was deprecated in Perl 5.24, and +it will be a fatal error in Perl 5.28. + =item Use of comma-less variable list is deprecated (D deprecated) The values you give to a format should be diff --git a/t/lib/warnings/pp b/t/lib/warnings/pp index 3eef12a..defa398 100644 --- a/t/lib/warnings/pp +++ b/t/lib/warnings/pp @@ -139,7 +139,7 @@ $_ = ~ "\x{100}"; EXPECT OPTION regex Use of strings with code points over 0xFF as arguments to 1's complement \(~\) operator is deprecated at - line \d+. -Use of code point 0xFF+EFF is deprecated; the permissible max is 0x7F+ at - line \d+. +Use of code point 0xFF+EFF is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 at - line \d+. ######## # NAME chr -1 use warnings 'utf8'; diff --git a/t/lib/warnings/utf8 b/t/lib/warnings/utf8 index dded118..e4fc411 100644 --- a/t/lib/warnings/utf8 +++ b/t/lib/warnings/utf8 @@ -746,17 +746,17 @@ print $fh $to_warn_char, "\n"; close $fh; EXPECT OPTION regex -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ in pattern match \(m//\) at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ in regexp compilation at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ in regexp compilation at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ in regexp compilation at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 in pattern match \(m//\) at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 in regexp compilation at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 in regexp compilation at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 in regexp compilation at - line \d+. Operation "uc" returns its argument for non-Unicode code point 0x7F+ at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 at - line \d+. Operation "uc" returns its argument for non-Unicode code point 0x80+ at - line \d+. Code point 0x7F+ is not Unicode, may not be portable in print at - line \d+. -Use of code point 0x80+ is deprecated; the permissible max is 0x7F+ in print at - line \d+. +Use of code point 0x80+ is deprecated; the permissible max is 0x7F+\. This will be fatal in Perl 5\.28 in print at - line \d+. ######## # NAME [perl #127262] BEGIN{ diff --git a/utf8.c b/utf8.c index 4dbefe5..fe311be 100644 --- a/utf8.c +++ b/utf8.c @@ -37,7 +37,7 @@ static const char malformed_text[] = "Malformed UTF-8 character"; static const char unees[] = "Malformed UTF-8 character (unexpected end of string)"; static const char cp_above_legal_max[] = - "Use of code point 0x%"UVXf" is deprecated; the permissible max is 0x%"UVXf""; + "Use of code point 0x%"UVXf" is deprecated; the permissible max is 0x%"UVXf". This will be fatal in Perl 5.28"; #define MAX_NON_DEPRECATED_CP ((UV) (IV_MAX)) -- Perl5 Master Repository
