aboutsummaryrefslogtreecommitdiffstats
path: root/main/perl/perl-gcc5-h2ph.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/perl/perl-gcc5-h2ph.patch')
-rw-r--r--main/perl/perl-gcc5-h2ph.patch62
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
+