Grokbase
x

[perl #15898] coredump with variable our

View TopicPrint | Flat  Thread  Threaded
1) pe...@perl.org # New Ticket Created by Elizabeth Mattijsen # Please include the string: [perl #15898] # in the...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
# New Ticket Created by  Elizabeth Mattijsen 
# Please include the string:  [perl #15898]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=15898 >


This is a bug report for perl from [email protected: l...@dijkmat.nl.]
generated with the help of perlbug 1.26 running under perl 5.008.


-----------------------------------------------------------------
[Please enter your report here]

perl -e 'my $i = 1; our ${"scalar$i"} : shared = 1'

coredumps

[Please do not change anything below this line]
-----------------------------------------------------------------

---
This perlbug was built using Perl 5.00503 - Wed Feb  2 15:34:50 EST 2000
It is being executed now by  Perl 5.008 - Wed Jul 24 14:27:23 CEST 2002.

Site configuration information for perl 5.008:

Configured by liz at Wed Jul 24 14:27:23 CEST 2002.

Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
   Platform:
     osname=linux, osvers=2.2.20, archname=i686-linux-thread-multi
     uname='linux dolphin.hsyndicate.com 2.2.20 #1 smp wed jan 2 21:32:07 
cet 2002 i686 unknown '
     config_args='-de -Dusethreads'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef 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 -D_GNU_SOURCE -fno-strict-aliasing 
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-I/usr/include/gdbm',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing 
-I/usr/local/include -I/usr/include/gdbm'
     ccversion='', gccversion='egcs-2.91.66 19990314/Linux (egcs-1.1.2 
release)', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=4, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lnsl -lndbm -lgdbm -ldb -ldl -lm -lpthread -lc -lposix -lcrypt 
-lutil
     perllibs=-lnsl -ldl -lm -lpthread -lc -lposix -lcrypt -lutil
     libc=/lib/libc-2.1.3.so, so=so, useshrplib=false, libperl=libperl.a
     gnulibc_version='2.1.3'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
     cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:


---
@INC for perl 5.008:
     /usr/local/lib/perl5/5.8.0/i686-linux-thread-multi
     /usr/local/lib/perl5/5.8.0
     /usr/local/lib/perl5/site_perl/5.8.0/i686-linux-thread-multi
     /usr/local/lib/perl5/site_perl/5.8.0
     /usr/local/lib/perl5/site_perl/5.6.1
     /usr/local/lib/perl5/site_perl
     .

---
Environment for perl 5.008:
     HOME=/home/liz
     LANG=en_US
     LANGUAGE (unset)
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)
     PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin
     PERL_BADLANG (unset)
     SHELL=/bin/bash
2) Abigail And it's the compiler that dumps core: $ perl -ce 'our ${""} : foo = 1' Segmentation fault This is...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
On Wed, Jul 31, 2002 at 03:21:29PM -0000, Elizabeth Mattijsen wrote:
> # New Ticket Created by  Elizabeth Mattijsen
> # Please include the string:  [perl #15898]
> # in the subject line of all future correspondence about this issue.
> # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=15898 >
>
>
> This is a bug report for perl from [email protected: l...@dijkmat.nl.]
> generated with the help of perlbug 1.26 running under perl 5.008.
>
>
> -----------------------------------------------------------------
> [Please enter your report here]
>
> perl -e 'my $i = 1; our ${"scalar$i"} : shared = 1'
>
> coredumps


And it's the compiler that dumps core:
                                      
    $ perl -ce 'our ${""} : foo = 1'  
    Segmentation fault              
    $                 

This is the stack trace I got:
                              
    #0  0x808dc0e in S_my_kid (o=0x817a378, attrs=0x817a3a8, imopsp=0xbffff3b8)
        at op.c:2098
    #1  0x808de36 in Perl_my_attrs (o=0x817a378, attrs=0x817a3a8) at op.c:2149
    #2  0x8089089 in Perl_yyparse () at perly.y:718                           
    #3  0x806157a in S_parse_body (env=0x0, xsinit=0x805df74 <xs_init>)
        at perl.c:1519
#4 0x80606f3 in perl_parse (my_perl=0x81765e8, xsinit=0x805df74 <xs_init>,
        argc=3, argv=0xbffff5f4, env=0x0) at perl.c:1041
    #5  0x805df0f in main (argc=3, argv=0xbffff5f4, env=0xbffff604)
        at perlmain.c:83
    #6  0x4006f2eb in __libc_start_main (main=0x805de90 <main>, argc=3,
ubp_av=0xbffff5f4, init=0x805cf5c <_init>, fini=0x81516ec <_fini>,
        rtld_fini=0x4000c130 <_dl_fini>, stack_end=0xbffff5ec)
        at ../sysdeps/generic/libc-start.c:129


Abigail
3) Rafael Garcia-Suarez Indeed. With this patch, the compiler reports a syntax error "Can't declare scalar dereference in...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Abigail wrote:
> And it's the compiler that dumps core:
>                                       
>     $ perl -ce 'our ${""} : foo = 1'  
>     Segmentation fault              

Indeed. With this patch, the compiler reports a syntax error
"Can't declare scalar dereference in our".

--- op.c.orig Wed Jul 10 01:36:04 2002
+++ op.c Wed Jul 31 17:51:37 2002
@@ -2089,17 +2089,20 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **im
          type == OP_RV2AV ||
          type == OP_RV2HV) { /* XXX does this let anything illegal in? */
        if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
-           yyerror(Perl_form(aTHX_ "Can't declare %s in my", OP_DESC(o)));
+           yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
+         OP_DESC(o),
+     PL_in_my == KEY_our ? "our" : "my"));
          }
          if (attrs) {
              GV *gv = cGVOPx_gv(cUNOPo->op_first);
              PL_in_my = FALSE;
              PL_in_my_stash = Nullhv;
-            apply_attrs(GvSTASH(gv),
-                        (type == OP_RV2SV ? GvSV(gv) :
-                         type == OP_RV2AV ? (SV*)GvAV(gv) :
-                         type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
-                        attrs, FALSE);
+     if (isGV(gv))
+  apply_attrs(GvSTASH(gv),
+       (type == OP_RV2SV ? GvSV(gv) :
+        type == OP_RV2AV ? (SV*)GvAV(gv) :
+        type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
+       attrs, FALSE);
          }
   o->op_private |= OPpOUR_INTRO;
   return o;
End of Patch.

I have to ask this question for the second time today :
Where should I add the regression test? Should I create a new
file under t/run for tests like that (e.g. test that a syntax error
does not dump core ?) (And port the contents of t/run/fresh_perl.t
to it ?)
4) Rafael Garcia-Suarez In fact for maximum safety this should be "if (gv && isGV(gv))" here. Without this additional check...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Rafael Garcia-Suarez wrote:
>          if (attrs) {
> GV *gv = cGVOPx_gv(cUNOPo->op_first);
>              PL_in_my = FALSE;
>              PL_in_my_stash = Nullhv;
> -            apply_attrs(GvSTASH(gv),
> - (type == OP_RV2SV ? GvSV(gv) :
> - type == OP_RV2AV ? (SV*)GvAV(gv) :
> - type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
> -                        attrs, FALSE);
> +        if (isGV(gv))

In fact for maximum safety this should be "if (gv && isGV(gv))" here.
Without this additional check the following will dump core :
     ./perl -e 'my $$foo : bar'
5) h...@crypt.org :I have to ask this question for the second time today : :Where should I add the regression test?...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Rafael Garcia-Suarez <raphel.garcia-suarez@hexaflux.com> wrote:
:I have to ask this question for the second time today :
:Where should I add the regression test? Should I create a new
:file under t/run for tests like that (e.g. test that a syntax error
:does not dump core ?) (And port the contents of t/run/fresh_perl.t
:to it ?)

Ideally, we want the regression tests to be sorted by what they are
testing rather than by what happens when they fail.

If I remember correctly, the Test:: modules have a mechanism for
running in a fresh_perl; if the most appropriate test file already
uses the Test:: modules, it should be easy to add a fresh_perl test,
if not let's put them in a t/run/misc for now but with a comment
saying where they should really have gone - perhaps we'll find a
useful way to put them there later.

Hugo
6) Michael G Schwern Place it wherever the 'our' tests are. Since there's no t/op/our.t, start one. The core dump can be...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
On Wed, Jul 31, 2002 at 05:53:48PM +0200, Rafael Garcia-Suarez wrote:
> I have to ask this question for the second time today :
> Where should I add the regression test? Should I create a new
> file under t/run for tests like that (e.g. test that a syntax error
> does not dump core ?) (And port the contents of t/run/fresh_perl.t
> to it ?)

Place it wherever the 'our' tests are.  Since there's no t/op/our.t, start
one.

The core dump can be tested with one of fresh_perl_is() or fresh_perl_like()
from t/test.pl.


--

Michael G. Schwern <schwern@pobox.com> http://www.pobox.com/~schwern/
Perl Quality Assurance <perl-qa@perl.org> Kwalitee Is Job One
Cheating is often more efficient.
- Seven of Nine
7) Rafael Garcia-Suarez As this is also a 'my' bug, and related to attributes, I think t/op/attrs.t is more appropriate....
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Michael G Schwern wrote:
> On Wed, Jul 31, 2002 at 05:53:48PM +0200, Rafael Garcia-Suarez wrote:
>
>>I have to ask this question for the second time today :
>>Where should I add the regression test? Should I create a new
>>file under t/run for tests like that (e.g. test that a syntax error
>>does not dump core ?) (And port the contents of t/run/fresh_perl.t
>>to it ?)
>
>
> Place it wherever the 'our' tests are. Since there's no t/op/our.t, start
> one.

As this is also a 'my' bug, and related to attributes,
I think t/op/attrs.t is more appropriate.

That doesn't help for the %::="" segfault. I suggest to
create t/op/stash.t for various tests about the symbol table hashes.
8) Rafael Garcia-Suarez Forget this patch. It doesn't work with ithreads. Another (simpler) fix is to insert a simple...
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Rafael Garcia-Suarez wrote:
> Abigail wrote:
> > And it's the compiler that dumps core:
> >                                       
> >     $ perl -ce 'our ${""} : foo = 1'  
> >     Segmentation fault              
>
> Indeed. With this patch, the compiler reports a syntax error
> "Can't declare scalar dereference in our".
>
> --- op.c.orig Wed Jul 10 01:36:04 2002
> +++ op.c Wed Jul 31 17:51:37 2002

Forget this patch. It doesn't work with ithreads.
Another (simpler) fix is to insert a simple "else" after
the "if ... { yyerror }" block.

There's also a patch to t/op/attrs.t. I added two tests
at the end and I ported it to use t/test.pl.

--- op.c.orig Wed Jul 10 23:13:08 2002
+++ op.c Fri Aug  2 23:33:48 2002
@@ -2088,19 +2088,19 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **im
     } else if (type == OP_RV2SV || /* "our" declaration */
         type == OP_RV2AV ||
         type == OP_RV2HV) { /* XXX does this let anything illegal in? */
-      if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
-           yyerror(Perl_form(aTHX_ "Can't declare %s in my", OP_DESC(o)));
-        }
-        if (attrs) {
-            GV *gv = cGVOPx_gv(cUNOPo->op_first);
-            PL_in_my = FALSE;
-            PL_in_my_stash = Nullhv;
-            apply_attrs(GvSTASH(gv),
-                        (type == OP_RV2SV ? GvSV(gv) :
-                         type == OP_RV2AV ? (SV*)GvAV(gv) :
-                         type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
-                        attrs, FALSE);
-        }
+ if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
+     yyerror(Perl_form(aTHX_ "Can't declare %s in %s",
+   OP_DESC(o), PL_in_my == KEY_our ? "our" : "my"));
+ } else if (attrs) {
+     GV *gv = cGVOPx_gv(cUNOPo->op_first);
+     PL_in_my = FALSE;
+     PL_in_my_stash = Nullhv;
+     apply_attrs(GvSTASH(gv),
+   (type == OP_RV2SV ? GvSV(gv) :
+    type == OP_RV2AV ? (SV*)GvAV(gv) :
+    type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
+   attrs, FALSE);
+ }
  o->op_private |= OPpOUR_INTRO;
  return o;
     }
--- t/op/attrs.t.orig Fri Mar 29 09:34:37 2002
+++ t/op/attrs.t Fri Aug  2 23:38:07 2002
@@ -5,188 +5,93 @@
BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
+    require './test.pl';
}

-sub NTESTS () ;
-
-my ($test, $ntests);
-BEGIN {$ntests=0}
-$test=0;
-my $failed = 0;
-
-print "1..".NTESTS."\n";
+plan tests => 37;

$SIG{__WARN__} = sub { die @_ };

-sub mytest {
-    my $bad = '';
-    if (!$@ ne !$_[0] || $_[0] && $@ !~ $_[0]) {
- if ($@) {
-     my $x = $@;
-     $x =~ s/\n.*\z//s;
-     print "# Got: $x\n"
- }
- else {
-     print "# Got unexpected success\n";
- }
- if ($_[0]) {
-     print "# Expected: $_[0]\n";
- }
- else {
-     print "# Expected success\n";
- }
- $failed = 1;
- $bad = 'not ';
-    }
-    elsif (@_ == 3 && $_[1] ne $_[2]) {
- print "# Got: $_[1]\n";
- print "# Expected: $_[2]\n";
- $failed = 1;
- $bad = 'not ';
-    }
-    print $bad."ok ".++$test."\n";
+sub eval_ok ($) {
+    eval $_[0];
+    is( $@, '' );
}

-eval 'sub t1 ($) : locked { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t2 : locked { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t3 ($) : locked ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t4 : locked ;';
-mytest;
-BEGIN {++$ntests}
-
-my $anon1;
-eval '$anon1 = sub ($) : locked:method { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-my $anon2;
-eval '$anon2 = sub : locked : method { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-my $anon3;
-eval '$anon3 = sub : method { $_[0]->[1] }';
-mytest;
-BEGIN {++$ntests}
+eval_ok 'sub t1 ($) : locked { $_[0]++ }';
+eval_ok 'sub t2 : locked { $_[0]++ }';
+eval_ok 'sub t3 ($) : locked ;';
+eval_ok 'sub t4 : locked ;';
+our $anon1; eval_ok '$anon1 = sub ($) : locked:method { $_[0]++ }';
+our $anon2; eval_ok '$anon2 = sub : locked : method { $_[0]++ }';
+our $anon3; eval_ok '$anon3 = sub : method { $_[0]->[1] }';

eval 'sub e1 ($) : plugh ;';
-mytest qr/^Invalid CODE attributes?: ["']?plugh["']? at/;
-BEGIN {++$ntests}
+like $@, qr/^Invalid CODE attributes?: ["']?plugh["']? at/;

eval 'sub e2 ($) : plugh(0,0) xyzzy ;';
-mytest qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /;
-BEGIN {++$ntests}
+like $@, qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /;

eval 'sub e3 ($) : plugh(0,0 xyzzy ;';
-mytest qr/Unterminated attribute parameter in attribute list at/;
-BEGIN {++$ntests}
+like $@, qr/Unterminated attribute parameter in attribute list at/;

eval 'sub e4 ($) : plugh + xyzzy ;';
-mytest qr/Invalid separator character '[+]' in attribute list at/;
-BEGIN {++$ntests}
-
-eval 'my main $x : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my $x : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my $x ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) : ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) ;';
-mytest;
-BEGIN {++$ntests}
+like $@, qr/Invalid separator character '[+]' in attribute list at/;

-eval 'my ($x,$y) : ;';
-mytest;
-BEGIN {++$ntests}
+eval_ok 'my main $x : = 0;';
+eval_ok 'my $x : = 0;';
+eval_ok 'my $x ;';
+eval_ok 'my ($x) : = 0;';
+eval_ok 'my ($x) ;';
+eval_ok 'my ($x) : ;';
+eval_ok 'my ($x,$y) : = 0;';
+eval_ok 'my ($x,$y) ;';
+eval_ok 'my ($x,$y) : ;';

eval 'my ($x,$y) : plugh;';
-mytest qr/^Invalid SCALAR attribute: ["']?plugh["']? at/;
-BEGIN {++$ntests}
+like $@, qr/^Invalid SCALAR attribute: ["']?plugh["']? at/;

sub A::MODIFY_SCALAR_ATTRIBUTES { return }
eval 'my A $x : plugh;';
-mytest qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/;
-BEGIN {++$ntests}
+like $@, qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/;

eval 'my A $x : plugh plover;';
-mytest qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /;
-BEGIN {++$ntests}
+like $@, qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /;

eval 'package Cat; my Cat @socks;';
-mytest qr/^Can't declare class for non-scalar \@socks in "my"/;
-BEGIN {++$ntests}
+like $@, qr/^Can't declare class for non-scalar \@socks in "my"/;

sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" }
sub X::foo { 1 }
*Y::bar = \&X::foo;
*Y::bar = \&X::foo; # second time for -w
eval 'package Z; sub Y::bar : foo';
-mytest qr/^X at /;
-BEGIN {++$ntests}
+like $@, qr/^X at /;

eval 'package Z; sub Y::baz : locked {}';
my @attrs = eval 'attributes::get \&Y::baz';
-mytest '', "@attrs", "locked";
-BEGIN {++$ntests}
+is "@attrs", "locked";

@attrs = eval 'attributes::get $anon1';
-mytest '', "@attrs", "locked method";
-BEGIN {++$ntests}
+is "@attrs", "locked method";

sub Z::DESTROY { }
sub Z::FETCH_CODE_ATTRIBUTES { return 'Z' }
my $thunk = eval 'bless +sub : method locked { 1 }, "Z"';
-mytest '', ref($thunk), "Z";
-BEGIN {++$ntests}
+is ref($thunk), "Z";

@attrs = eval 'attributes::get $thunk';
-mytest '', "@attrs", "locked method Z";
-BEGIN {++$ntests}
+is "@attrs", "locked method Z";

# Test ability to modify existing sub's (or XSUB's) attributes.
eval 'package A; sub X { $_[0] } sub X : lvalue';
@attrs = eval 'attributes::get \&A::X';
-mytest '', "@attrs", "lvalue";
-BEGIN {++$ntests}
+is "@attrs", "lvalue";

# Above not with just 'pure' built-in attributes.
sub Z::MODIFY_CODE_ATTRIBUTES { (); }
eval 'package Z; sub L { $_[0] } sub L : Z lvalue';
@attrs = eval 'attributes::get \&Z::L';
-mytest '', "@attrs", "lvalue Z";
-BEGIN {++$ntests}
-
+is "@attrs", "lvalue Z";

# Begin testing attributes that tie

@@ -196,26 +101,23 @@
     sub TIESCALAR { my $x = $_[1]; bless \$x, $_[0]; }
     sub FETCH { ${$_[0]} }
     sub STORE {
- #print "# In Ttie::STORE\n";
- ::mytest '';
+ ::pass;
  ${$_[0]} = $_[1]*2;
     }
     package Tloop;
     sub MODIFY_SCALAR_ATTRIBUTES { tie ${$_[1]}, 'Ttie', -1; (); }
}

-eval '
+eval_ok '
     package Tloop;
     for my $i (0..2) {
  my $x : TieLoop = $i;
- $x != $i*2 and ::mytest "", $x, $i*2;
+ $x != $i*2 and ::is $x, $i*2;
     }
';
-mytest;
-BEGIN {$ntests += 4}
-
-# Other tests should be added above this line

-sub NTESTS () { $ntests }
-
-exit $failed;
+# bug #15898
+eval 'our ${""} : foo = 1';
+like $@, qr/Can't declare scalar dereference in our/;
+eval 'my $$foo : bar = 1';
+like $@, qr/Can't declare scalar dereference in my/;
9) h...@crypt.org :> --- op.c.orig Wed Jul 10 01:36:04 2002 :> +++ op.c Wed Jul 31 17:51:37 2002 :Forget this patch....
| +1 vote (Anchor)
[ Profile | Reply to group ] [ Flat  Thread  Threaded ]
Rafael Garcia-Suarez <rgarciasuarez@free.fr> wrote:
:Rafael Garcia-Suarez wrote:
:> --- op.c.orig Wed Jul 10 01:36:04 2002
:> +++ op.c Wed Jul 31 17:51:37 2002
:
:Forget this patch. It doesn't work with ithreads.
:Another (simpler) fix is to insert a simple "else" after
:the "if ... { yyerror }" block.
:
:There's also a patch to t/op/attrs.t. I added two tests
:at the end and I ported it to use t/test.pl.

Thanks, applied as #17699.

Hugo
spacer
View TopicPrint | Flat  Thread  Threaded
Home > Groups > Perl 5 Porters > [perl #15898] coredump with variable our (9 posts)