Use of Unicode code points exceeding IV_MAX will be fatal in Perl 5.28
authorAbigail <abigail@abigail.be>
Wed, 23 Nov 2016 18:06:51 +0000 (19:06 +0100)
committerAbigail <abigail@abigail.be>
Mon, 16 Jan 2017 18:18:13 +0000 (19:18 +0100)
Changed the warning to reflect the deadline of this deprecation.
Update tests, perldiag.pod and added a section to perldeprecation.pod.

pod/perldeprecation.pod
pod/perldiag.pod
t/lib/warnings/pp
t/lib/warnings/utf8
utf8.c

index e91b6e9..cb41c2a 100644 (file)
@@ -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{}>
 
index ce03693..9a5612e 100644 (file)
@@ -6903,7 +6903,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
@@ -6920,6 +6920,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
index 3eef12a..defa398 100644 (file)
@@ -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';
index 3f8265b..af04d4c 100644 (file)
@@ -756,18 +756,18 @@ 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+ in uc 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 in uc 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 901ddaf..77e16f3 100644 (file)
--- 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))