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

t/op/stash.t: 3 new test failures on Darwin/PPC #13054

Closed
p5pRT opened this issue Jun 22, 2013 · 18 comments
Closed

t/op/stash.t: 3 new test failures on Darwin/PPC #13054

p5pRT opened this issue Jun 22, 2013 · 18 comments

Comments

@p5pRT
Copy link

p5pRT commented Jun 22, 2013

Migrated from rt.perl.org#118603 (status was 'resolved')

Searchable as RT118603$

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @jkeenan

In the past week t/op/stash.t has begun to experience test failures on
Darwin/PPC. These appear to be the first test failures specific to this
platform since January 2013.

Here is the output of​: cd t;./perl harness -v op/stash.t;cd -

#####
op/stash.t ..
1..58
ok 1 - delete $​::{STDERR} and print a warning
ok 2 - Insert a non-GV in a stash, under warnings 'once'
ok 3 - Defining an XSUB over an existing sub with no stash under warnings
ok 4 - stashes happen to be defined if not used
ok 5 - - work with hard refs too
ok 6 - stashes are defined if seen at compile time
ok 7 - - work with hard refs too
ok 8 - stashes are defined if a var is seen at compile time
ok 9 - - work with hard refs too
ok 10 - package A​::B; sub a { // }; %A​::=""
ok 11 - use Exporter; package A; sub a { // }; delete $​::{...
ok 12 - works in eval{}
ok 13 - works in eval("")
ok 14 - referencing a non-existent stash doesn't produce stricture errors
ok 15 - referencing a non-existent stash element doesn't produce
stricture errors
ok 16 - deleted stash entry leaves CV with valid GV isa B​::GV
not ok 17 - ...and CVf_ANON set
ok 18 - ...and an __ANON__ name
ok 19 - ...but leaves stash intact
ok 20 - cleared stash leaves CV with valid GV isa B​::GV
not ok 21 - ...and CVf_ANON set
ok 22 - ...and an __ANON__ name
ok 23 - ...but leaves stash intact
ok 24 - undefed stash leaves CV with valid GV isa B​::GV
not ok 25 - ...and CVf_ANON set
ok 26 - ...and an __ANON__ name
ok 27 - ...and an __ANON__ stash
ok 28 - cleared stash leaves anon CV with valid GV
ok 29 - ...but leaves the stash intact
ok 30 - undefed stash leaves anon CV with valid GV
not ok 31 - ...and an __ANON__ stash # TODO STASHES not anonymized
# Failed test 31 - ...and an __ANON__ stash at op/stash.t line 155
# got undef
# expected "__ANON__"
ok 32 - anonymised CV whose stash is detached still has a GV
ok 33 - CV anonymised when its stash is detached becomes __ANON__​::__ANON__
ok 34 - NULL CvSTASH on named sub
ok 35 - orphaned CV has valid GV
ok 36 - orphaned CV has anon GV
ok 37 - ex-named CV has valid GV
ok 38 - ex-named CV has anon GV
ok 39 - anon CV has valid GV
ok 40 - anon CV has anon GV
ok 41 - stub records the package it was compiled in
ok 42 - stub records the file it was compiled in
ok 43 - definition overrides the package it was compiled in
ok 44 - definition overrides the file it was compiled in
# Failed test 17 - ...and CVf_ANON set at op/stash.t line 104
# got "0"
# expected "128"
# Failed test 21 - ...and CVf_ANON set at op/stash.t line 116
# got "0"
# expected "128"
# Failed test 25 - ...and CVf_ANON set at op/stash.t line 128
# got "0"
# expected "128"
ok 45 - no segfault with overload/deleted stash entry [\#58530]
ok 46 - __ANON__ sub called ok
ok 47 - globs stringify the same way when stashes are moved
ok 48 - ref() returns the same thing when an object’s stash is moved
ok 49 - objects stringify the same way when their stashes are moved
ok 50 - __PACKAGE__ returns the same when the current stash is moved
ok 51 - globs stringify the same way when stashes are detached
ok 52 - ref() returns the same thing when an object’s stash is detached
ok 53 - objects stringify the same way when their stashes are detached
ok 54 - __PACKAGE__ returns the same when the current stash is detached
ok 55 - setting stash name during undef has no effect
ok 56 - packages ending with :​: are self-consistent
ok 57 - ' is equivalent to :​: before a null
ok 58 - no crashing or errors when clobbering the current package
Failed 3/58 subtests

Test Summary Report


op/stash.t (Wstat​: 0 Tests​: 58 Failed​: 3)
  Failed tests​: 17, 21, 25
Files=1, Tests=58, 1 wallclock secs ( 0.07 usr 0.02 sys + 0.17 cusr
0.21 csys = 0.47 CPU)
Result​: FAIL
/Users/jimk/gitwork/perl
Sat Jun 22 12​:37​:38 EDT 2013
#####

Given the lack of speed on this platform, a formal 'git bisect' would
take days. However, I have manually bisected the problem this far​:

#####
commit 3147622
Author​: Father Chrysostomos <sprout@​cpan.org>
AuthorDate​: Fri Jun 14 00​:40​:23 2013 -0700
Commit​: Father Chrysostomos <sprout@​cpan.org>
CommitDate​: Fri Jun 14 18​:13​:16 2013 -0700

t/op/stash.t PASS
#####
commit b8a02ff
Author​: David Golden <dagolden@​cpan.org>
AuthorDate​: Wed Jun 19 22​:28​:22 2013 -0400
Commit​: David Golden <dagolden@​cpan.org>
CommitDate​: Wed Jun 19 22​:28​:22 2013 -0400

t/op/stash.t FAIL as above
#####

So the failure emerged between June 14 and June 19. As of this morning,
blead was experiencing these failures as well.

If someone can suggest either specific commits to test or debugging
procedures, please contact me ASAP.

Thank you very much.
Jim Keenan

#####
Summary of my perl5 (revision 5 version 18 subversion 0) configuration​:

  Platform​:
  osname=darwin, osvers=8.11.0, archname=darwin-2level
  uname='darwin macintosh-9.local 8.11.0 darwin kernel version
8.11.0​: wed oct 10 18​:26​:00 pdt 2007; root​:xnu-792.24.17~1release_ppc
power macintosh powerpc '
  config_args='-des'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=undef, usemultiplicity=undef
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing
-pipe -I/usr/local/include -I/opt/local/include',
  optimize='-O3',
  cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe
-I/usr/local/include -I/opt/local/include'
  ccversion='', gccversion='4.0.1 (Apple Computer, Inc. build 5250)',
gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='
-L/usr/local/lib -L/opt/local/lib'
  libpth=/usr/local/lib /opt/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lc
  perllibs=-ldl -lm -lc
  libc=, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
-L/usr/local/lib -L/opt/local/lib'

Characteristics of this binary (from libperl)​:
  Compile-time options​: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
  PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
  PERL_PRESERVE_IVUV PERL_SAWAMPERSAND
USE_LARGE_FILES
  USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
  USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
  Built under darwin
  Compiled at May 18 2013 12​:31​:26
  %ENV​:
  PERLBREW_BASHRC_VERSION="0.59"
  PERLBREW_HOME="/Users/jimk/.perlbrew"
  PERLBREW_MANPATH=""
  PERLBREW_PATH="/Users/jimk/perl5/perlbrew/bin"
  PERLBREW_ROOT="/Users/jimk/perl5/perlbrew"
  PERLBREW_VERSION="0.59"
  @​INC​:
  /usr/local/lib/perl5/site_perl/5.18.0/darwin-2level
  /usr/local/lib/perl5/site_perl/5.18.0
  /usr/local/lib/perl5/5.18.0/darwin-2level
  /usr/local/lib/perl5/5.18.0
  /usr/local/lib/perl5/site_perl/5.16.0
  /usr/local/lib/perl5/site_perl/5.14.2
  /usr/local/lib/perl5/site_perl/5.14.0
  /usr/local/lib/perl5/site_perl/5.12.0
  /usr/local/lib/perl5/site_perl/5.10.1
  /usr/local/lib/perl5/site_perl/5.10.0
  /usr/local/lib/perl5/site_perl/5.8.6
  /usr/local/lib/perl5/site_perl
  .
#####

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @nwc10

On Sat, Jun 22, 2013 at 10​:34​:55AM -0700, James E Keenan wrote​:

Test Summary Report
-------------------
op/stash.t (Wstat​: 0 Tests​: 58 Failed​: 3)
Failed tests​: 17, 21, 25
Files=1, Tests=58, 1 wallclock secs ( 0.07 usr 0.02 sys + 0.17 cusr
0.21 csys = 0.47 CPU)
Result​: FAIL
/Users/jimk/gitwork/perl
Sat Jun 22 12​:37​:38 EDT 2013
#####

Given the lack of speed on this platform, a formal 'git bisect' would
take days. However, I have manually bisected the problem this far​:

#####
commit 3147622
Author​: Father Chrysostomos <sprout@​cpan.org>
AuthorDate​: Fri Jun 14 00​:40​:23 2013 -0700
Commit​: Father Chrysostomos <sprout@​cpan.org>
CommitDate​: Fri Jun 14 18​:13​:16 2013 -0700

t/op/stash.t PASS
#####
commit b8a02ff
Author​: David Golden <dagolden@​cpan.org>
AuthorDate​: Wed Jun 19 22​:28​:22 2013 -0400
Commit​: David Golden <dagolden@​cpan.org>
CommitDate​: Wed Jun 19 22​:28​:22 2013 -0400

t/op/stash.t FAIL as above
#####

So the failure emerged between June 14 and June 19. As of this morning,
blead was experiencing these failures as well.

If someone can suggest either specific commits to test or debugging
procedures, please contact me ASAP.

Do the tests fail in the same way if you run them as

./perl t/op/stash.t

If so, given that the difference between those two commits is this​:

$ git diff --stat 3147622..b8a02ff
Makefile.SH | 10 +-
Porting/Maintainers.pl | 16 +-
Porting/core-cpan-diff | 6 +-
Porting/release_managers_guide.pod | 10 +
cpan/Archive-Tar/lib/Archive/Tar.pm | 6 +-
cpan/Archive-Tar/lib/Archive/Tar/Constant.pm | 2 +-
cpan/Archive-Tar/lib/Archive/Tar/File.pm | 6 +-
cpan/Getopt-Long/CHANGES | 7 +
cpan/Getopt-Long/README | 2 +-
cpan/Getopt-Long/lib/Getopt/Long.pm | 18 +-
cpan/HTTP-Tiny/lib/HTTP/Tiny.pm | 22 +-
cpan/Time-Piece/Piece.pm | 2 +-
cpan/Unicode-Collate/Changes | 5 +-
cpan/Unicode-Collate/Collate.pm | 36 +--
cpan/Unicode-Collate/README | 4 +-
dist/Module-CoreList/lib/Module/CoreList/Utils.pm | 111 ++++++++++
doop.c | 4 +-
ext/B/t/concise.t | 8 +-
gv.c | 6 +-
handy.h | 6 +
lib/locale.t | 16 +-
lib/version/t/07locale.t | 26 ++-
op.c | 2 +-
pad.c | 2 +-
perl.h | 5 +
pod/perldelta.pod | 259 ++++++----------------
pod/perlfunc.pod | 30 ++-
pod/perllocale.pod | 236 +++++++++++++-------
pod/perlrecharclass.pod | 4 +-
pod/perlsyn.pod | 4 +-
pp.c | 10 +-
pp_hot.c | 11 +-
regcomp.c | 12 +-
sv.c | 42 +++-
sv.h | 2 +-
t/lib/warnings/op | 4 +-
t/op/concat2.t | 2 +-
t/op/lexsub.t | 10 +-
t/op/magic.t | 12 +-
t/porting/customized.dat | 6 +-
t/porting/customized.t | 2 +-
t/porting/diag.t | 1 +
t/porting/known_pod_issues.dat | 1 +
t/re/subst.t | 2 +-
win32/FindExt.pm | 18 ++
win32/config_sh.PL | 13 --
46 files changed, 594 insertions(+), 425 deletions(-)

which is no Configure changes, config.sh won't change in any of the revisions
in that range. (I see that Makefile.SH has, so Makefile might end up changing,
but the make below should take care of that)

So, I think you can rebuild between each bisect by taking any build tree
between those two commits, and updating the necessary code with just​:

make perl lib/auto/B/B.bundle

(or possibly make -j2 perl lib/auto/B/B.bundle )

before re-running the test.
That ought to cut your re-build time down massively.
(And I think for the 49 commits you'll only need at most 7 rebuilds)

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

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

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @nwc10

On Sat, Jun 22, 2013 at 06​:50​:01PM +0100, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 10​:34​:55AM -0700, James E Keenan wrote​:

If someone can suggest either specific commits to test or debugging
procedures, please contact me ASAP.

At a guess, try this one​:

commit 51c78f1
Author​: Peter Martini <PeterCMartini@​GMail.com>
Date​: Tue Jun 18 00​:07​:05 2013 -0400

  Upgrade cv_flags_t from 16 to 32 bits.
 
  Its main use is in a struct otherwise filled with pointers, which
  means on 32-bit architectures its almost certainly taking up 32
  bits anyway.

Inline Patch
diff --git a/sv.h b/sv.h
index 449b23e..b0fd5b2 100644
--- a/sv.h
+++ b/sv.h
@@ -531,7 +531,7 @@ struct xpvgv {
     union _xnvu xnv_u;
 };
 
-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;
 
 #define _XPVCV_COMMON								\
     HV *	xcv_stash;							\



The guess being that it's something to do with passing a 32 bit value into a format which expects 16 bits\, which doesn't show up on a little endian system\.

In which case, OMG, we need a big endian smoker. Just one. Someone. Please.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @cpansprout

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

On Sat, Jun 22, 2013 at 06​:50​:01PM +0100, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 10​:34​:55AM -0700, James E Keenan wrote​:

If someone can suggest either specific commits to test or debugging
procedures, please contact me ASAP.

At a guess, try this one​:

commit 51c78f1
Author​: Peter Martini <PeterCMartini@​GMail.com>
Date​: Tue Jun 18 00​:07​:05 2013 -0400

Upgrade cv\_flags\_t from 16 to 32 bits\.

Its main use is in a struct otherwise filled with pointers\, which
means on 32\-bit architectures its almost certainly taking up 32
bits anyway\.

diff --git a/sv.h b/sv.h
index 449b23e..b0fd5b2 100644
--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @nwc10

On Sat, Jun 22, 2013 at 02​:20​:26PM -0700, Father Chrysostomos via RT wrote​:

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

I've bisected on a big endian linux machine I have access to, and that's it.
Running tests on a fix...

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @nwc10

On Sat, Jun 22, 2013 at 10​:22​:57PM +0100, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 02​:20​:26PM -0700, Father Chrysostomos via RT wrote​:

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

I've bisected on a big endian linux machine I have access to, and that's it.
Running tests on a fix...

Try this​:

commit 13d58115f07b12133a2df2821b893f0fc20065d9
Author​: Nicholas Clark <nick@​ccl4.org>
Date​: Sat Jun 22 14​:25​:26 2013 -0700

  Update B's size/offset for CvFLAGS to U32, following commit 51c78f1.
 
  B.xs contains a table of offsets and sizes for members of the various SV
  structures. This needs updating as 51c78f1 changed CvFLAGS from
  U16 to U32. This ommision won't be noticed on little endian platforms, but on
  big endian platforms B​::CV​::CvFLAGS will return 0 instead of the true value.

Inline Patch
diff --git a/ext/B/B.xs b/ext/B/B.xs
index fdeca72..fbe6be6 100644
--- a/ext/B/B.xs
+++ b/ext/B/B.xs
@@ -1328,7 +1328,7 @@ MODULE = B	PACKAGE = B::IV
 #define PVCV_file_ix	sv_char_pp | offsetof(struct xpvcv, xcv_file)
 #define PVCV_outside_ix	sv_SVp | offsetof(struct xpvcv, xcv_outside)
 #define PVCV_outside_seq_ix sv_U32p | offsetof(struct xpvcv, xcv_outside_seq)
-#define PVCV_flags_ix	sv_U16p | offsetof(struct xpvcv, xcv_flags)
+#define PVCV_flags_ix	sv_U32p | offsetof(struct xpvcv, xcv_flags)
 
 #define PVHV_max_ix	sv_STRLENp | offsetof(struct xpvhv, xhv_max)
 

Pushed as origin/smoke-me/nicholas/RT-118603

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @jkeenan

On 6/22/13 5​:32 PM, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 10​:22​:57PM +0100, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 02​:20​:26PM -0700, Father Chrysostomos via RT wrote​:

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

I've bisected on a big endian linux machine I have access to, and that's it.
Running tests on a fix...

Try this​:

commit 13d58115f07b12133a2df2821b893f0fc20065d9
Author​: Nicholas Clark<nick@​ccl4.org>
Date​: Sat Jun 22 14​:25​:26 2013 -0700

Pushed as origin/smoke-me/nicholas/RT-118603

t/op/stash.t PASS in this branch; now running full make test

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From PeterCMartini@GMail.com

On Sat, Jun 22, 2013 at 5​:22 PM, Nicholas Clark <nick@​ccl4.org> wrote​:

On Sat, Jun 22, 2013 at 02​:20​:26PM -0700, Father Chrysostomos via RT wrote​:

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

I've bisected on a big endian linux machine I have access to, and that's it.
Running tests on a fix...

Nicholas Clark

Ugh, doubly my fault, first for the patch, and second for not getting
round to setting up the big-endian smoker - I have a Solaris 10 /
new-ish SPARC box I bought for the task and hadn't set up yet. I'll
start poking at that tonight (and if anyone can give me pointers, off
list, I'd appreciate it).

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @cpansprout

On Sat Jun 22 14​:33​:02 2013, nicholas wrote​:

On Sat, Jun 22, 2013 at 10​:22​:57PM +0100, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 02​:20​:26PM -0700, Father Chrysostomos via RT
wrote​:

On Sat Jun 22 13​:10​:53 2013, nicholas wrote​:

--- a/sv.h
+++ b/sv.h
@​@​ -531,7 +531,7 @​@​ struct xpvgv {
union _xnvu xnv_u;
};

-typedef U16 cv_flags_t;
+typedef U32 cv_flags_t;

#define _XPVCV_COMMON \
HV * xcv_stash; \

Yes, that is it.

I've bisected on a big endian linux machine I have access to, and
that's it.
Running tests on a fix...

Try this​:

commit 13d58115f07b12133a2df2821b893f0fc20065d9
Author​: Nicholas Clark <nick@​ccl4.org>
Date​: Sat Jun 22 14​:25​:26 2013 -0700

Update B's size/offset for CvFLAGS to U32\, following commit

51c78f1.

B\.xs contains a table of offsets and sizes for members of the

various SV
structures. This needs updating as 51c78f1 changed
CvFLAGS from
U16 to U32. This ommision won't be noticed on little endian
platforms, but on
big endian platforms B​::CV​::CvFLAGS will return 0 instead of the
true value.

diff --git a/ext/B/B.xs b/ext/B/B.xs
index fdeca72..fbe6be6 100644
--- a/ext/B/B.xs
+++ b/ext/B/B.xs
@​@​ -1328,7 +1328,7 @​@​ MODULE = B PACKAGE = B​::IV
#define PVCV_file_ix sv_char_pp | offsetof(struct xpvcv, xcv_file)
#define PVCV_outside_ix sv_SVp | offsetof(struct xpvcv, xcv_outside)
#define PVCV_outside_seq_ix sv_U32p | offsetof(struct xpvcv,
xcv_outside_seq)
-#define PVCV_flags_ix sv_U16p | offsetof(struct xpvcv, xcv_flags)
+#define PVCV_flags_ix sv_U32p | offsetof(struct xpvcv, xcv_flags)

#define PVHV_max_ix sv_STRLENp | offsetof(struct xpvhv, xhv_max)

Pushed as origin/smoke-me/nicholas/RT-118603

Wouldn’t a more robust approach like the attached be better? (I have
not actually tested my patch.)

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2013

From @cpansprout

Inline Patch
diff --git a/ext/B/B.xs b/ext/B/B.xs
index fdeca72..92606f9 100644
--- a/ext/B/B.xs
+++ b/ext/B/B.xs
@@ -1328,7 +1328,14 @@ MODULE = B	PACKAGE = B::IV
 #define PVCV_file_ix	sv_char_pp | offsetof(struct xpvcv, xcv_file)
 #define PVCV_outside_ix	sv_SVp | offsetof(struct xpvcv, xcv_outside)
 #define PVCV_outside_seq_ix sv_U32p | offsetof(struct xpvcv, xcv_outside_seq)
-#define PVCV_flags_ix	sv_U16p | offsetof(struct xpvcv, xcv_flags)
+#if sizeof(cv_flags_t) == sizeof(U16)
+# define PVCV_flags_ix	sv_U16p | offsetof(struct xpvcv, xcv_flags)
+#elif sizeof(cv_flags_t) == sizeof(U32)
+# define PVCV_flags_ix	sv_U32p | offsetof(struct xpvcv, xcv_flags)
+#else
+# error Cannot handle cv_flags_t! What size is it?
+#endif
+
 
 #define PVHV_max_ix	sv_STRLENp | offsetof(struct xpvhv, xhv_max)
 

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2013

From @jkeenan

On Sat Jun 22 16​:24​:09 2013, sprout wrote​:

On Sat Jun 22 14​:33​:02 2013, nicholas wrote​:

Pushed as origin/smoke-me/nicholas/RT-118603

Wouldn’t a more robust approach like the attached be better? (I have
not actually tested my patch.)

Nicholas's smoke-me branch builds and tests successfully on Darwin/PPC,
so it solves the problem originally posted in this RT.

Father C, if you would like to test and smoke your patch, please do so.
Since IANACP, I can't say which patch is better. But I do want blead
to get back to PASS asap so that I can resume my normal work via this
machine.

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2013

From @craigberry

On Sat, Jun 22, 2013 at 6​:24 PM, Father Chrysostomos via RT
<perlbug-followup@​perl.org> wrote​:

On Sat Jun 22 14​:33​:02 2013, nicholas wrote​:

Pushed as origin/smoke-me/nicholas/RT-118603

Wouldn’t a more robust approach like the attached be better? (I have
not actually tested my patch.)

The fact that it doesn't compile makes it a bit less robust, actually :-(.

Read <http​://gcc.gnu.org/onlinedocs/cpp/If.html#If>, notably the bit
that says, "The preprocessor does not know anything about types in the
language. Therefore, sizeof operators are not recognized in ‘#if’."

And while defensive programming has its places, I'm not sure the size
of cv_flags_t is going to be system-dependent (given the general
obsolescence of <32-bit systems, or, in other words U32 being
available always and everywhere) or would change with any frequency.

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2013

From @craigberry

On Sat, Jun 22, 2013 at 6​:03 PM, James E Keenan <jkeen@​verizon.net> wrote​:

On 6/22/13 5​:32 PM, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 10​:22​:57PM +0100, Nicholas Clark wrote​:

Pushed as origin/smoke-me/nicholas/RT-118603

t/op/stash.t PASS in this branch; now running full make test

I get all tests passing for that branch with the following
configuration on Darwin PPC​:

% ./perl -Ilib -V
Summary of my perl5 (revision 5 version 19 subversion 2) configuration​:
  Commit id​: 13d58115f07b12133a2df2821b893f0fc20065d9
  Platform​:
  osname=darwin, osvers=9.8.0, archname=darwin-2level
  uname='darwin brianor.local 9.8.0 darwin kernel version 9.8.0​: wed
jul 15 16​:57​:01 pdt 2009; root​:xnu-1228.15.4~1release_ppc power
macintosh '
  config_args='-Dusedevel -des'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=undef, usemultiplicity=undef
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include -I/opt/local/include',
  optimize='-O3',
  cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include -I/opt/local/include'
  ccversion='', gccversion='4.0.1 (Apple Inc. build 5493)', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='
-fstack-protector -L/usr/local/lib -L/opt/local/lib'
  libpth=/usr/local/lib /opt/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lutil -lc
  perllibs=-ldl -lm -lutil -lc
  libc=, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
-L/usr/local/lib -L/opt/local/lib -fstack-protector'

Characteristics of this binary (from libperl)​:
  Compile-time options​: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
  PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
  PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
  PERL_USE_DEVEL USE_LARGE_FILES USE_LOCALE
  USE_LOCALE_COLLATE USE_LOCALE_CTYPE
  USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
  Built under darwin
  Compiled at Jun 23 2013 10​:59​:34
  @​INC​:
  lib
  /usr/local/lib/perl5/site_perl/5.19.2/darwin-2level
  /usr/local/lib/perl5/site_perl/5.19.2
  /usr/local/lib/perl5/5.19.2/darwin-2level
  /usr/local/lib/perl5/5.19.2
  /usr/local/lib/perl5/site_perl
  .

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2013

From PeterCMartini@GMail.com

On Sun, Jun 23, 2013 at 1​:35 PM, Craig A. Berry <craig.a.berry@​gmail.com> wrote​:

On Sat, Jun 22, 2013 at 6​:03 PM, James E Keenan <jkeen@​verizon.net> wrote​:

On 6/22/13 5​:32 PM, Nicholas Clark wrote​:

On Sat, Jun 22, 2013 at 10​:22​:57PM +0100, Nicholas Clark wrote​:

Pushed as origin/smoke-me/nicholas/RT-118603

t/op/stash.t PASS in this branch; now running full make test

I get all tests passing for that branch with the following
configuration on Darwin PPC​:

% ./perl -Ilib -V
Summary of my perl5 (revision 5 version 19 subversion 2) configuration​:
Commit id​: 13d58115f07b12133a2df2821b893f0fc20065d9
Platform​:
osname=darwin, osvers=9.8.0, archname=darwin-2level
uname='darwin brianor.local 9.8.0 darwin kernel version 9.8.0​: wed
jul 15 16​:57​:01 pdt 2009; root​:xnu-1228.15.4~1release_ppc power
macintosh '
config_args='-Dusedevel -des'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler​:
cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include -I/opt/local/include',
optimize='-O3',
cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include -I/opt/local/include'
ccversion='', gccversion='4.0.1 (Apple Inc. build 5493)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries​:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='
-fstack-protector -L/usr/local/lib -L/opt/local/lib'
libpth=/usr/local/lib /opt/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking​:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
-L/usr/local/lib -L/opt/local/lib -fstack-protector'

Characteristics of this binary (from libperl)​:
Compile-time options​: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
PERL_USE_DEVEL USE_LARGE_FILES USE_LOCALE
USE_LOCALE_COLLATE USE_LOCALE_CTYPE
USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
Built under darwin
Compiled at Jun 23 2013 10​:59​:34
@​INC​:
lib
/usr/local/lib/perl5/site_perl/5.19.2/darwin-2level
/usr/local/lib/perl5/site_perl/5.19.2
/usr/local/lib/perl5/5.19.2/darwin-2level
/usr/local/lib/perl5/5.19.2
/usr/local/lib/perl5/site_perl
.

Also confirmed on my Solaris 10 / SPARC box,

bash-3.2$ uname -a
SunOS sunsmoke 5.10 Generic_147440-01 sun4v sparc SUNW,Sun-Fire-T1000
bash-3.2$ ./perl -Ilib -V
Summary of my perl5 (revision 5 version 19 subversion 2) configuration​:
  Commit id​: 13d58115f07b12133a2df2821b893f0fc20065d9
  Platform​:
  osname=solaris, osvers=2.10, archname=sun4-solaris-thread-multi
  uname='sunos sunsmoke 5.10 generic_147440-01 sun4v sparc
sunw,sun-fire-t1000 '
  config_args='-Duse64bitall -Dusethreads -Dusedevel -des'
  hint=previous, useposix=true, d_sigaction=define
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-D_REENTRANT -DDEBUGGING -fno-strict-aliasing
-pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-DPERL_USE_SAFE_PUTENV -DPERL_USE_SAFE_PUTENV -DPERL_USE_SAFE_PUTENV',
  optimize='-O -g',
  cppflags='-D_REENTRANT -DDEBUGGING -fno-strict-aliasing -pipe
-D_REENTRANT -DDEBUGGING -fno-strict-aliasing -pipe
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPERL_USE_SAFE_PUTENV
-D_REENTRANT -DDEBUGGING -fno-strict-aliasing -pipe
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPERL_USE_SAFE_PUTENV
-DPERL_USE_SAFE_PUTENV'
  ccversion='', gccversion='3.4.3
(csl-sol210-3_4-branch+sol_rpath)', gccosandvers='solaris2.10'
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='cc', ldflags =' '
  libpth=/usr/lib /usr/ccs/lib
  libs=-lsocket -lnsl -ldl -lm -lpthread -lc
  perllibs=-lsocket -lnsl -ldl -lm -lpthread -lc
  libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
  cccdlflags='-fPIC', lddlflags='-G'

Characteristics of this binary (from libperl)​:
  Compile-time options​: DEBUGGING HAS_TIMES MULTIPLICITY PERLIO_LAYERS
  PERL_DONT_CREATE_GVSV
  PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
  PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
  PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
  PERL_TRACK_MEMPOOL PERL_USE_DEVEL
  PERL_USE_SAFE_PUTENV USE_ITHREADS USE_LARGE_FILES
  USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
  USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
  USE_REENTRANT_API
  Built under solaris
  Compiled at Jun 23 2013 15​:30​:15
  @​INC​:
  lib
  /opt/lib/perl5/site_perl/5.19.2/sun4-solaris-thread-multi
  /opt/lib/perl5/site_perl/5.19.2
  /opt/lib/perl5/5.19.2/sun4-solaris-thread-multi
  /opt/lib/perl5/5.19.2
  /opt/lib/perl5/site_perl
  .

Sorry I didn't build that box for testing earlier :-(

@p5pRT
Copy link
Author

p5pRT commented Jun 24, 2013

From @jkeenan

On Sat Jun 22 18​:30​:50 2013, jkeenan wrote​:

On Sat Jun 22 16​:24​:09 2013, sprout wrote​:

On Sat Jun 22 14​:33​:02 2013, nicholas wrote​:

Pushed as origin/smoke-me/nicholas/RT-118603

Wouldn’t a more robust approach like the attached be better? (I have
not actually tested my patch.)

Nicholas's smoke-me branch builds and tests successfully on Darwin/PPC,
so it solves the problem originally posted in this RT.

If there's no objection, I'd like to get this branch merged into blead
today. Nicholas or anyone can do it, but if no one else does, I will do
so this evening so that I can re-test, then close the ticket.

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented Jun 27, 2013

From @jkeenan

On Mon Jun 24 03​:44​:30 2013, jkeenan wrote​:

On Sat Jun 22 18​:30​:50 2013, jkeenan wrote​:

Nicholas's smoke-me branch builds and tests successfully on Darwin/PPC,
so it solves the problem originally posted in this RT.

If there's no objection, I'd like to get this branch merged into blead
today. Nicholas or anyone can do it, but if no one else does, I will do
so this evening so that I can re-test, then close the ticket.

The problems we were having in recent days with excessive warnings
during 'make' have been solved by Karl's reversion of the problematic
patches. So I can now clearly say that t/op/stash.t is PASSing all its
tests on blead. So we can now resolve this ticket.

Thanks to Nicholas and all you helped out.

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented Jun 27, 2013

@jkeenan - Status changed from 'open' to 'resolved'

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

No branches or pull requests

1 participant