Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ExtUtils::ParseXS breaks compilation of XS modules on 5.8.5 with -Duseithreads -Doptimize='-g' -DDEBUGGING on gcc5.3.1 #15236

Open
p5pRT opened this issue Mar 18, 2016 · 4 comments

Comments

@p5pRT
Copy link

@p5pRT p5pRT commented Mar 18, 2016

Migrated from rt.perl.org#127739 (status was 'open')

Searchable as RT127739$

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Mar 18, 2016

From @wolfsage

Created by WolfSage@gmail.com

Reported by ribasushi on Devel​::PPPort initially (
Dual-Life/Devel-PPPort#31)

  Building and testing Devel-PPPort-3.32 ... cp PPPort.pm
blib/lib/Devel/PPPort.pm
  Running Mkbootstrap for Devel​::PPPort ()
  chmod 644 "PPPort.bs"
  "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch"
"-Iblib/lib" PPPort_xs.PL RealPPPort.xs
  adding XS code from parts/inc/sv_xpvf
  "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl"
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/xsubpp"
-noprototypes -typemap
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/typemap"
-typemap "typemap" RealPPPort.xs > RealPPPort.xsc && mv RealPPPort.xsc
RealPPPort.c
  "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch"
"-Iblib/lib" ppport_h.PL ppport.h
  cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing
-pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g
-DVERSION=\"3.32\" -DXS_VERSION=\"3.32\" -fpic
"-I/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE"
RealPPPort.c
  In file included from RealPPPort.xs​:31​:0​:
  RealPPPort.c​: In function ‘S_croak_xs_usage’​:

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:115​:18​:
error​: ‘my_perl’ undeclared (first use in this function)
  # define aTHX my_perl
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:2619​:40​:
note​: in definition of macro ‘PERL_DEB’
  # define PERL_DEB(a) a
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:120​:18​:
note​: in expansion of macro ‘aTHX’
  # define aTHX_ aTHX,
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:2773​:17​:
note​: in expansion of macro ‘aTHX_’
  Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed​: file
\"%s\", line %d", \
  ^
  RealPPPort.c​:423​:41​: note​: in expansion of macro ‘assert’
  #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
  ^
  RealPPPort.c​:434​:5​: note​: in expansion of macro
‘PERL_ARGS_ASSERT_CROAK_XS_USAGE’
  PERL_ARGS_ASSERT_CROAK_XS_USAGE;
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:115​:18​:
note​: each undeclared identifier is reported only once for each function it
appears in
  # define aTHX my_perl
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:2619​:40​:
note​: in definition of macro ‘PERL_DEB’
  # define PERL_DEB(a) a
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:120​:18​:
note​: in expansion of macro ‘aTHX’
  # define aTHX_ aTHX,
  ^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h​:2773​:17​:
note​: in expansion of macro ‘aTHX_’
  Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed​: file
\"%s\", line %d", \
  ^
  RealPPPort.c​:423​:41​: note​: in expansion of macro ‘assert’
  #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
  ^
  RealPPPort.c​:434​:5​: note​: in expansion of macro
‘PERL_ARGS_ASSERT_CROAK_XS_USAGE’
  PERL_ARGS_ASSERT_CROAK_XS_USAGE;
  ^
  Makefile​:349​: recipe for target 'RealPPPort.o' failed
  make​: *** [RealPPPort.o] Error 1

It turned out to be that the latest ExtUtils​::ParseXS was installed, and
xsubpp is filling in a croak_xs that looks like​:

  STATIC void
  S_croak_xs_usage(const CV *const cv, const char *const params)
  {
  const GV *const gv = CvGV(cv);

  PERL_ARGS_ASSERT_CROAK_XS_USAGE;

  if (gv) {

If we add dTHX; to the beginning of the function, compilation succeeds.
Does ExtUtils​::ParseXS need something like​:

#ifdef PERL_NO_GET_CONTEXT
  dTHX;
#endif

which it has on other functions?

Perl Info

Flags:
    category=library
    severity=low
    module=ExtUtils::ParseXS

Site configuration information for perl 5.18.2:

Configured by Debian Project at Tue Mar  1 17:12:59 UTC 2016.

Summary of my perl5 (revision 5 version 18 subversion 2) configuration:

  Platform:
    osname=linux, osvers=3.13.0-79-generic,
archname=x86_64-linux-gnu-thread-multi
    uname='linux lgw01-37 3.13.0-79-generic #123-ubuntu smp fri feb 19
14:27:58 utc 2016 x86_64 x86_64 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4
-Wformat -Werror=format-security -Dldflags= -Wl,-Bsymbolic-functions
-Wl,-z,relro -Dlddlflags=-shared -Wl,-Bsymbolic-functions -Wl,-z,relro
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.18 -Darchlib=/usr/lib/perl/5.18
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.18.2
-Dsitearch=/usr/local/lib/perl/5.18.2 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm
-Ui_libutil -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib
-Dlibperl=libperl.so.5.18.2 -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector
-fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='4.8.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=, so=so, useshrplib=true, libperl=libperl.so.5.18.2
    gnulibc_version='2.19'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib
-fstack-protector'

Locally applied patches:
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS
default for modules installed from CPAN.
    DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly
restrictive DB_File version check.
    DEBPKG:debian/doc_info - Replace generic man(1) instructions with
Debian-specific information.
    DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs
to follow symlinks and ignore missing @INC directories.
    DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno
version check due to upgrade problems with long-running processes.
    DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note
that libperl-dev package is required for embedded linking
    DEBPKG:fixes/respect_umask - Respect umask during installation
    DEBPKG:debian/writable_site_dirs - Set umask approproately for site
install directories
    DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of
libperl.a to /usr/lib
    DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or
perllocal.pod for perl or vendor
    DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables
written to the makefile
    DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the
binary targets.
    DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist
files for core or vendor.
    DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as
per Debian policy.
    DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to
/etc/perl/Net as /usr may not be writable.
    DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
    DEBPKG:debian/module_build_man_extensions -
http://bugs.debian.org/479460 Adjust Module::Build manual page extensions
for the Debian Perl policy
    DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list
of libraries wanted to what we actually need.
    DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038]
http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option
    DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip
include directories in /usr/local
    DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707
Configure CPANPLUS to use the site directories by default.
    DEBPKG:debian/cpanplus_config_path - Save local versions of
CPANPLUS::Config::System into /etc/perl.
    DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/702096 Point
users to Debian packages of deprecated core modules
    DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764
Squelch locale warnings in Debian package maintainer scripts
    DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the
upstream Git repository
    DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged
patches for 5.18.2-2ubuntu1.1 in patchlevel.h
    DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493 [perl
#96272] Skip a crashing test case in t/op/threads.t on GNU/kFreeBSD
    DEBPKG:fixes/document_makemaker_ccflags - http://bugs.debian.org/628522
[rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags}
    DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure
CPAN::Distribution with correct name of html2text
    DEBPKG:debian/hurd_test_skip_stack - http://bugs.debian.org/650175
Disable failing GNU/Hurd tests dist/threads/t/stack.t
    DEBPKG:fixes/manpage_name_Test-Harness - http://bugs.debian.org/650451 [
rt.cpan.org #73399] cpan/Test-Harness: add NAME headings in modules with POD
    DEBPKG:debian/makemaker-pasthru - http://bugs.debian.org/660195 [
rt.cpan.org #28632] Make EU::MM pass LD through to recursive Makefile.PL
invocations
    DEBPKG:debian/perl5db-x-terminal-emulator.patch -
http://bugs.debian.org/668490 Invoke x-terminal-emulator rather than xterm
in perl5db.pl
    DEBPKG:debian/cpan-missing-site-dirs - http://bugs.debian.org/688842
Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is
writable
    DEBPKG:fixes/memoize_storable_nstore - [rt.cpan.org #77790]
http://bugs.debian.org/587650 Memoize::Storable: respect 'nstore' option
not respected
    DEBPKG:fixes/net_ftp_failed_command - [rt.cpan.org #37700]
http://bugs.debian.org/491062 Net::FTP: cope gracefully with a failed
command
    DEBPKG:fixes/perlbug-patchlist - [3541c11] http://bugs.debian.org/710842
[perl #118433] Make perlbug look up the list of local patches at run time
    DEBPKG:fixes/module_metadata_security_doc - [68cdd4b] CVE-2013-1437
documentation fix
    DEBPKG:fixes/module_metadata_taint_fix - [bff978f]
http://bugs.debian.org/722210 [rt.cpan.org #88576] untaint version, if
needed, in Module::Metadata
    DEBPKG:fixes/IPC-SysV-spelling - http://bugs.debian.org/730558 [
rt.cpan.org #86736] Fix spelling of IPC_CREAT in IPC-SysV documentation
    DEBPKG:fixes/fix-undef-source -
    DEBPKG:fixes/CVE-2013-7422.patch - [PATCH] [perl #119505] Segfault from
bad backreference
    DEBPKG:fixes/CVE-2014-4330.patch - [PATCH] don't recurse infinitely in
Data::Dumper
    DEBPKG:fixes/CVE-2016-2381.patch - [PATCH 1/2] remove duplicate
environment variables from environ


@INC for perl 5.18.2:
    /etc/perl
    /usr/local/lib/perl/5.18.2
    /usr/local/share/perl/5.18.2
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.18
    /usr/share/perl/5.18
    /usr/local/lib/site_perl
    .


Environment for perl 5.18.2:
    HOME=/home/mhorsfall
    LANG=en_US.UTF-8
    LANGUAGE=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)

PATH=/home/mhorsfall/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    PERLDOC=-oman
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jan 5, 2017

From @jkeenan

On Fri, 18 Mar 2016 15​:04​:15 GMT, alh wrote​:

This is a bug report for perl from WolfSage@​gmail.com,
generated with the help of perlbug 1.39 running under perl 5.18.2.

-----------------------------------------------------------------
[Please describe your issue here]

Reported by ribasushi on Devel​::PPPort initially (
Dual-Life/Devel-PPPort#31)

Building and testing Devel-PPPort-3.32 ... cp PPPort.pm
blib/lib/Devel/PPPort.pm
Running Mkbootstrap for Devel​::PPPort ()
chmod 644 "PPPort.bs"
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch"
"-Iblib/lib" PPPort_xs.PL RealPPPort.xs
adding XS code from parts/inc/sv_xpvf
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl"
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/xsubpp"
-noprototypes -typemap
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/typemap"
-typemap "typemap" RealPPPort.xs > RealPPPort.xsc && mv
RealPPPort.xsc
RealPPPort.c
"/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch"
"-Iblib/lib" ppport_h.PL ppport.h
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing
-pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-g
-DVERSION=\"3.32\" -DXS_VERSION=\"3.32\" -fpic
"-I/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE"
RealPPPort.c
In file included from RealPPPort.xs​:31​:0​:
RealPPPort.c​: In function ‘S_croak_xs_usage’​:

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:115​:18​:
error​: ‘my_perl’ undeclared (first use in this function)
# define aTHX my_perl
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:2619​:40​:
note​: in definition of macro ‘PERL_DEB’
# define PERL_DEB(a) a
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:120​:18​:
note​: in expansion of macro ‘aTHX’
# define aTHX_ aTHX,
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:2773​:17​:
note​: in expansion of macro ‘aTHX_’
Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed​: file
\"%s\", line %d", \
^
RealPPPort.c​:423​:41​: note​: in expansion of macro ‘assert’
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv);
assert(params)
^
RealPPPort.c​:434​:5​: note​: in expansion of macro
‘PERL_ARGS_ASSERT_CROAK_XS_USAGE’
PERL_ARGS_ASSERT_CROAK_XS_USAGE;
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:115​:18​:
note​: each undeclared identifier is reported only once for each
function it
appears in
# define aTHX my_perl
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:2619​:40​:
note​: in definition of macro ‘PERL_DEB’
# define PERL_DEB(a) a
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:120​:18​:
note​: in expansion of macro ‘aTHX’
# define aTHX_ aTHX,
^

/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-
thread-multi/CORE/perl.h​:2773​:17​:
note​: in expansion of macro ‘aTHX_’
Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed​: file
\"%s\", line %d", \
^
RealPPPort.c​:423​:41​: note​: in expansion of macro ‘assert’
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv);
assert(params)
^
RealPPPort.c​:434​:5​: note​: in expansion of macro
‘PERL_ARGS_ASSERT_CROAK_XS_USAGE’
PERL_ARGS_ASSERT_CROAK_XS_USAGE;
^
Makefile​:349​: recipe for target 'RealPPPort.o' failed
make​: *** [RealPPPort.o] Error 1

It turned out to be that the latest ExtUtils​::ParseXS was installed,
and
xsubpp is filling in a croak_xs that looks like​:

STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params)
{
const GV *const gv = CvGV(cv);

PERL_ARGS_ASSERT_CROAK_XS_USAGE;

if (gv) {

If we add dTHX; to the beginning of the function, compilation
succeeds.
Does ExtUtils​::ParseXS need something like​:

#ifdef PERL_NO_GET_CONTEXT
dTHX;
#endif

which it has on other functions?

I'm confused as to where in the source code you think such a change should be applied. I don't see that 'ifdef' anywhere in ExtUtils-ParseXS.

#####
$ ack -A2 'ifdef PERL_NO_GET_CONTEXT' .
cpan/Devel-PPPort/parts/inc/variables
214​:#ifdef PERL_NO_GET_CONTEXT
215- dTHX;
216-#endif

cpan/Devel-PPPort/parts/inc/newCONSTSUB
75​:#ifdef PERL_NO_GET_CONTEXT
76- dTHX;
77-#endif
#####

Thank you very much.
--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jan 5, 2017

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jan 6, 2017

From @wolfsage

On Thu, Jan 5, 2017 at 4​:03 PM, James E Keenan via RT
<perlbug-followup@​perl.org> wrote​:

I'm confused as to where in the source code you think such a change should be applied. I don't see that 'ifdef' anywhere in ExtUtils-ParseXS.

#####
$ ack -A2 'ifdef PERL_NO_GET_CONTEXT' .
cpan/Devel-PPPort/parts/inc/variables
214​:#ifdef PERL_NO_GET_CONTEXT
215- dTHX;
216-#endif

cpan/Devel-PPPort/parts/inc/newCONSTSUB
75​:#ifdef PERL_NO_GET_CONTEXT
76- dTHX;
77-#endif
#####

I don't recall my original reasoning.

However S_croak_xs_usage in core does this​:

  vutil.h​:S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params);
  vutil.h​:S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params)
  vutil.h​:#define croak_xs_usage(a,b) S_croak_xs_usage(aTHX_ a,b)
  vutil.h​:#define croak_xs_usage S_croak_xs_usage

Whereas ExtUtils​::ParseXS only does this​:

  lib/ExtUtils/ParseXS/Utilities.pm​:S_croak_xs_usage(const CV *const
cv, const char *const params);
  lib/ExtUtils/ParseXS/Utilities.pm​:S_croak_xs_usage(const CV *const
cv, const char *const params)
  lib/ExtUtils/ParseXS/Utilities.pm​:#define croak_xs_usage
S_croak_xs_usage

Seems to me like it's missing the pTHX depending on PERL_IMPLICIT_CONTEXT...

-- Matthew Horsfall (alh)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant