diff options
Diffstat (limited to 'main/perl/perl-gcc5-h2ph.patch')
-rw-r--r-- | main/perl/perl-gcc5-h2ph.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/main/perl/perl-gcc5-h2ph.patch b/main/perl/perl-gcc5-h2ph.patch new file mode 100644 index 0000000000..6733ebbab3 --- /dev/null +++ b/main/perl/perl-gcc5-h2ph.patch @@ -0,0 +1,62 @@ +From 3bea78d24634e630b610f59957e7a019205a67b2 Mon Sep 17 00:00:00 2001 +From: Tony Cook <tony@develop-help.com> +Date: Mon, 16 Feb 2015 15:57:00 +1100 +Subject: [PATCH] h2ph: correct handling of hex constants for the preamble + +Previously they were treated as identifiers resulting in code +generated like C< &0xFFF >. + +We also try to prevent compile-time warnings from large hex integers, +the user isn't responsible for the generated code, so we delay those +warnings to run-time. +--- + utils/h2ph.PL | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index 9a8b14d..d082f22 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -769,7 +769,7 @@ sub inc_dirs + sub build_preamble_if_necessary + { + # Increment $VERSION every time this function is modified: +- my $VERSION = 3; ++ my $VERSION = 4; + my $preamble = "$Dest_dir/_h2ph_pre.ph"; + + # Can we skip building the preamble file? +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { +-- +2.3.0-192-g4a23b1a + |