commit:     e576790a512945d1884868c55e87721b4d75b56b
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 30 21:26:22 2018 +0000
Commit:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sun Dec 30 21:26:38 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e576790a

dev-lang/perl: Add hppa workaround, bug 634162

Patch from Debian, see https://bugs.debian.org/869122

Closes: https://bugs.gentoo.org/634162
Package-Manager: Portage-2.3.53, Repoman-2.3.12
Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>

 dev-lang/perl/files/perl-5.26.2-hppa.patch | 105 +++++++++++++++++++++++++++++
 dev-lang/perl/perl-5.26.2.ebuild           |   4 ++
 dev-lang/perl/perl-5.26.9999.ebuild        |   4 ++
 dev-lang/perl/perl-5.28.0.ebuild           |   4 ++
 dev-lang/perl/perl-5.28.9999.ebuild        |   4 ++
 5 files changed, 121 insertions(+)

diff --git a/dev-lang/perl/files/perl-5.26.2-hppa.patch 
b/dev-lang/perl/files/perl-5.26.2-hppa.patch
new file mode 100644
index 00000000000..83ed944353e
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.26.2-hppa.patch
@@ -0,0 +1,105 @@
+https://bugs.gentoo.org/634162
+
+Source:
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869122
+
+Index: perl-5.26.0/op.c
+===================================================================
+--- perl-5.26.0.orig/op.c
++++ perl-5.26.0/op.c
+@@ -14832,6 +14832,7 @@ Perl_custom_op_get_field(pTHX_ const OP
+     SV *keysv;
+     HE *he = NULL;
+     XOP *xop;
++    XOPRETANY any;
+ 
+     static const XOP xop_null = { 0, 0, 0, 0, 0 };
+ 
+@@ -14874,58 +14875,37 @@ Perl_custom_op_get_field(pTHX_ const OP
+       else
+           xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
+     }
+-    {
+-      XOPRETANY any;
+-      if(field == XOPe_xop_ptr) {
+-          any.xop_ptr = xop;
+-      } else {
+-          const U32 flags = XopFLAGS(xop);
+-          if(flags & field) {
+-              switch(field) {
+-              case XOPe_xop_name:
+-                  any.xop_name = xop->xop_name;
+-                  break;
+-              case XOPe_xop_desc:
+-                  any.xop_desc = xop->xop_desc;
+-                  break;
+-              case XOPe_xop_class:
+-                  any.xop_class = xop->xop_class;
+-                  break;
+-              case XOPe_xop_peep:
+-                  any.xop_peep = xop->xop_peep;
+-                  break;
+-              default:
+-                  NOT_REACHED; /* NOTREACHED */
+-                  break;
+-              }
+-          } else {
+-              switch(field) {
+-              case XOPe_xop_name:
+-                  any.xop_name = XOPd_xop_name;
+-                  break;
+-              case XOPe_xop_desc:
+-                  any.xop_desc = XOPd_xop_desc;
+-                  break;
+-              case XOPe_xop_class:
+-                  any.xop_class = XOPd_xop_class;
+-                  break;
+-              case XOPe_xop_peep:
+-                  any.xop_peep = XOPd_xop_peep;
+-                  break;
+-              default:
+-                  NOT_REACHED; /* NOTREACHED */
+-                  break;
+-              }
+-          }
++
++    if(field == XOPe_xop_ptr) {
++        any.xop_ptr = xop;
++    } else {
++        const U32 flags = XopFLAGS(xop);
++        switch(field) {
++        case XOPe_xop_name:
++            any.xop_name = (flags & field) ? xop->xop_name : XOPd_xop_name;
++            break;
++        case XOPe_xop_desc:
++            any.xop_desc = (flags & field) ? xop->xop_desc : XOPd_xop_desc;
++            break;
++        case XOPe_xop_class:
++            any.xop_class = (flags & field) ? xop->xop_class : XOPd_xop_class;
++            break;
++        case XOPe_xop_peep:
++            any.xop_peep = (flags & field) ? xop->xop_peep : XOPd_xop_peep;
++            break;
++        default:
++            NOT_REACHED; /* NOTREACHED */
++            break;
+       }
+-        /* On some platforms (HP-UX, IA64) gcc emits a warning for this 
function:
+-         * op.c: In function 'Perl_custom_op_get_field':
+-         * op.c:...: warning: 'any.xop_name' may be used uninitialized in 
this function [-Wmaybe-uninitialized]
+-         * This is because on those platforms (with -DEBUGGING) NOT_REACHED
+-         * expands to assert(0), which expands to ((0) ? (void)0 :
+-         * __assert(...)), and gcc doesn't know that __assert can never 
return. */
+-      return any;
+     }
++
++    /* On some platforms (HP-UX, IA64) gcc emits a warning for this function:
++     * op.c: In function 'Perl_custom_op_get_field':
++     * op.c:...: warning: 'any.xop_name' may be used uninitialized in this 
function [-Wmaybe-uninitialized]
++     * This is because on those platforms (with -DEBUGGING) NOT_REACHED
++     * expands to assert(0), which expands to ((0) ? (void)0 :
++     * __assert(...)), and gcc doesn't know that __assert can never return. */
++    return any;
+ }
+ 
+ /*

diff --git a/dev-lang/perl/perl-5.26.2.ebuild b/dev-lang/perl/perl-5.26.2.ebuild
index e2af84bf47d..3efe8267e5b 100644
--- a/dev-lang/perl/perl-5.26.2.ebuild
+++ b/dev-lang/perl/perl-5.26.2.ebuild
@@ -307,6 +307,10 @@ src_prepare() {
        local patch
        EPATCH_OPTS+=" -p1"
 
+       if use hppa ; then
+               epatch "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
+       fi
+
        if [[ ${CHOST} == *-solaris* ]] ; then
                # do NOT mess with nsl, on Solaris this is always necessary,
                # when -lsocket is used e.g. to get h_errno

diff --git a/dev-lang/perl/perl-5.26.9999.ebuild 
b/dev-lang/perl/perl-5.26.9999.ebuild
index e2af84bf47d..3efe8267e5b 100644
--- a/dev-lang/perl/perl-5.26.9999.ebuild
+++ b/dev-lang/perl/perl-5.26.9999.ebuild
@@ -307,6 +307,10 @@ src_prepare() {
        local patch
        EPATCH_OPTS+=" -p1"
 
+       if use hppa ; then
+               epatch "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
+       fi
+
        if [[ ${CHOST} == *-solaris* ]] ; then
                # do NOT mess with nsl, on Solaris this is always necessary,
                # when -lsocket is used e.g. to get h_errno

diff --git a/dev-lang/perl/perl-5.28.0.ebuild b/dev-lang/perl/perl-5.28.0.ebuild
index a88e2d54acf..13cbdc3c005 100644
--- a/dev-lang/perl/perl-5.28.0.ebuild
+++ b/dev-lang/perl/perl-5.28.0.ebuild
@@ -307,6 +307,10 @@ src_prepare() {
        local patch
        EPATCH_OPTS+=" -p1"
 
+       if use hppa ; then
+               epatch "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
+       fi
+
        if [[ ${CHOST} == *-solaris* ]] ; then
                # do NOT mess with nsl, on Solaris this is always necessary,
                # when -lsocket is used e.g. to get h_errno

diff --git a/dev-lang/perl/perl-5.28.9999.ebuild 
b/dev-lang/perl/perl-5.28.9999.ebuild
index a88e2d54acf..13cbdc3c005 100644
--- a/dev-lang/perl/perl-5.28.9999.ebuild
+++ b/dev-lang/perl/perl-5.28.9999.ebuild
@@ -307,6 +307,10 @@ src_prepare() {
        local patch
        EPATCH_OPTS+=" -p1"
 
+       if use hppa ; then
+               epatch "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
+       fi
+
        if [[ ${CHOST} == *-solaris* ]] ; then
                # do NOT mess with nsl, on Solaris this is always necessary,
                # when -lsocket is used e.g. to get h_errno

Reply via email to