Package: perl-tk Version: 1:804.030-1 Severity: important Forwarded: https://rt.cpan.org/Public/Bug/Display.html?id=82677 Tags: upstream User: debian-p...@lists.debian.org Usertags: perl-5.18-transition
After fixing #708624, this package fails to build with perl 5.18.0-RC1 from experimental: cc -c -I.. -I/usr/include/freetype2 -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"804.03\" -DXS_VERSION=\"804.03\" -fPIC "-I/usr/lib/perl/5.18/CORE" -Wall -Wno-implicit-int -Wno-comment -Wno-unused -D__USE_FIXED_PROTOTYPES__ IO.c IO.xs: In function 'XS_Tk__IO_read': IO.xs:210:6: error: invalid use of void expression make[2]: *** [IO.o] Error 1 make[2]: Leaving directory `/home/niko/tmp/perl-tk-804.030/IO' make[1]: *** [subdirs] Error 2 make[1]: Leaving directory `/home/niko/tmp/perl-tk-804.030' make: *** [build-stamp] Error 2 >From the 5.18 perldelta.pod: SvUPGRADE() is no longer an expression. Originally this macro (and its underlying function, sv_upgrade()) were documented as boolean, although in reality they always croaked on error and never returned false. In 2005 the documentation was updated to specify a void return value, but SvUPGRADE() was left always returning 1 for backwards compatibility. This has now been removed, and SvUPGRADE() is now a statement with no return value. This is easily fixed by the attached patch, but then we see: cc -c -I/usr/include/freetype2 -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"804.03\" -DXS_VERSION=\"804.03\" -fPIC "-I/usr/lib/perl/5.18/CORE" -Wall -Wno-implicit-int -Wno-comment -Wno-unused -D__USE_FIXED_PROTOTYPES__ tkGlue.c tkGlue.c: In function 'LangSaveVar': tkGlue.c:4195:26: error: lvalue required as left operand of assignment tkGlue.c: In function 'XEvent_Info': tkGlue.c:5023:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] tkGlue.c: In function 'install_vtab': tkGlue.c:5513:6: warning: format '%d' expects argument of type 'int', but argument 3 has type 'size_t' [-Wformat] make[1]: *** [tkGlue.o] Error 1 which I don't have fix for ATM. FWIW, the code around tkGlue.c:4195 is #ifdef USE_ITHREADS CopSTASHPV(PL_curcop) = NULL; #else CopSTASH(PL_curcop) = NULL; #endif -- Niko Tyni nt...@debian.org
>From 1c62e2862c2ca72f21b9bb0e78f6d565d321d866 Mon Sep 17 00:00:00 2001 From: Niko Tyni <nt...@debian.org> Date: Fri, 17 May 2013 11:28:47 +0300 Subject: [PATCH] SvUPGRADE return value hasn't meant anything for years Quoting Perl 5.18 release notes (perldelta.pod): SvUPGRADE() is no longer an expression. Originally this macro (and its underlying function, sv_upgrade()) were documented as boolean, although in reality they always croaked on error and never returned false. In 2005 the documentation was updated to specify a void return value, but SvUPGRADE() was left always returning 1 for backwards compatibility. This has now been removed, and SvUPGRADE() is now a statement with no return value. --- IO/IO.xs | 6 +----- tkGlue.c | 5 +---- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/IO/IO.xs b/IO/IO.xs index 8ae2a57..9eb7823 100644 --- a/IO/IO.xs +++ b/IO/IO.xs @@ -207,11 +207,7 @@ int offset info.count = 0; info.error = 0; info.eof = 0; - if (!SvUPGRADE(buf, SVt_PV)) - { - RETVAL = &PL_sv_undef; - return; - } + (void) SvUPGRADE(buf, SVt_PV); SvPOK_only(buf); /* validate pointer */ Tcl_CreateFileHandler(fd, TCL_READABLE, read_handler, (ClientData) &info); do diff --git a/tkGlue.c b/tkGlue.c index dd3d283..443ba46 100644 --- a/tkGlue.c +++ b/tkGlue.c @@ -3830,10 +3830,7 @@ ClientData clientData; return EXPIRE((interp, "Cannot trace readonly variable")); } } - if (!SvUPGRADE(sv, SVt_PVMG)) - { - return EXPIRE((interp, "Trace SvUPGRADE failed")); - } + (void) SvUPGRADE(sv, SVt_PVMG); if (SvTYPE(sv) == SVt_PVAV) { -- 1.7.10.4