Closed p5pRT closed 20 years ago
This is a bug report for perl from tbayen@bayen.de\, generated with the help of perlbug 1.34 running under perl v5.8.2.
I found a really strange bug in the perl core. I set the severity to "high" because it is so strange. Who knows where this fault would show himself the next time?!? Don't control your nuclear power plant with this version of perl... :-)
I had the following error message in a script. I shortened the script up to the point you see here. It does no more do anything useful but it raises the error message. Just try it and tell me why I get this message.
I am using perl from Debian testing (sarge) with no modifications.
It would be nice to hear from you if this was helpful. If not - just get my thanks for the best and stablest language I ever used. Stop - BASIC 2.0 on Commodore 64 was very stable too... :-)
Thomas Bayen
****************************************************** #!/usr/bin/perl #use strict; #use warnings;
my $debug=0; my $tmpdir='tmp'; open FILE\, ">$tmpdir/x"; close FILE; if(1){ }else{ map 1\, (\<*>); } local $/; ******************************************************
The error message:
****************************************************** tbayen@jupiter:\~/Projekte/DurstHack$ perl test.pl Can't coerce GLOB to string in concat at test.pl line 7. tbayen@jupiter:\~/Projekte/DurstHack$ ******************************************************
Flags: category=core severity=high
Site configuration information for perl v5.8.2:
Configured by Debian Project at Sat Nov 15 18:33:34 EST 2003.
Summary of my perl5 (revision 5.0 version 8 subversion 2) configuration: Platform: osname=linux\, osvers=2.4.22-xfs+ti1211\, archname=i386-linux-thread-multi uname='linux kosh 2.4.22-xfs+ti1211 #1 sat oct 25 10:11:37 est 2003 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8.2 -Darchlib=/usr/lib/perl/5.8.2 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.2 -Dsitearch=/usr/local/lib/perl/5.8.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.2 -Dd_dosuid -des' 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 -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'\, optimize='-O3'\, cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include' ccversion=''\, gccversion='3.3.2 (Debian)'\, 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=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.3.2.so\, so=so\, useshrplib=true\, libperl=libperl.so.5.8.2 gnulibc_version='2.3.2' 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 v5.8.2: /etc/perl /usr/local/lib/perl/5.8.2 /usr/local/share/perl/5.8.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8.2 /usr/share/perl/5.8.2 /usr/local/lib/site_perl /usr/local/lib/perl/5.8.0 /usr/local/share/perl/5.8.0 .
Environment for perl v5.8.2: HOME=/home/tbayen LANG=de_DE@euro LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin PERL_BADLANG (unset) SHELL=/bin/bash
At 17:10 +0000 1/14/04\, Thomas Bayen (via RT) wrote:
----------------------------------------------------------------- I found a really strange bug in the perl core. I set the severity to "high" because it is so strange. Who knows where this fault would show himself the next time?!? Don't control your nuclear power plant with this version of perl... :-)
I had the following error message in a script. I shortened the script up to the point you see here. It does no more do anything useful but it raises the error message. Just try it and tell me why I get this message.
I am using perl from Debian testing (sarge) with no modifications.
It would be nice to hear from you if this was helpful. If not - just get my thanks for the best and stablest language I ever used. Stop - BASIC 2.0 on Commodore 64 was very stable too... :-)
Thomas Bayen
****************************************************** #!/usr/bin/perl #use strict; #use warnings;
my $debug=0; my $tmpdir='tmp'; open FILE\, ">$tmpdir/x"; close FILE; if(1){ }else{ map 1\, (\<*>); } local $/; ******************************************************
The error message:
****************************************************** tbayen@jupiter:\~/Projekte/DurstHack$ perl test.pl Can't coerce GLOB to string in concat at test.pl line 7. tbayen@jupiter:\~/Projekte/DurstHack$ ******************************************************
Further to this\, this _only_ happens with _all_ threaded versions of Perl (have tested 5.8.0 through 5.9.0\, so am not 100% sure about blead\, but I would be surprised if it were fixed there).
Also note that this script contains _all_ necessary elements. Take any away or make any changes\, and the error message goes away.
The deparse on 5.8.0 is slightly different from all later versions: But all deparses are the same for the threaded and unthreaded version of a Perl.
$ perl5.8.0-threaded -MO=Deparse strangebug my $debug = 0; my $tmpdir = 'tmp'; open FILE\, ">$tmpdir/x"; close FILE; do { use File::Glob ();
}; local $/;
$ perl5.8.1-threaded -MO=Deparse strangebug my $debug = 0; my $tmpdir = 'tmp'; open FILE\, ">$tmpdir/x"; close FILE; use File::Glob (); do { () }; local $/;
Clearly\, the "if" is being optimized away. The concat is in the line with open()\, clearly it is complainig about $tmpdir. Anyway\, if you look at the optree generated by a threaded Perl and an unthreaded Perl\, you get the following diff (for 5.8.3):
$ diff -u unthreaded threaded
Seems like there is an off-by-one difference between threaded and unthreaded here:
-i \<@> open[t6] vK/2 ->j +i \<@> open[t7] vK/2 ->j
Liz
The RT System itself - Status changed from 'new' to 'open'
On Thu\, Jan 15\, 2004 at 06:18:04AM +0100\, Elizabeth Mattijsen wrote:
At 17:10 +0000 1/14/04\, Thomas Bayen (via RT) wrote:
****************************************************** #!/usr/bin/perl #use strict; #use warnings;
my $debug=0; my $tmpdir='tmp'; open FILE\, ">$tmpdir/x"; close FILE; if(1){ }else{ map 1\, (\<*>); } local $/; ******************************************************
The error message:
****************************************************** tbayen@jupiter:\~/Projekte/DurstHack$ perl test.pl Can't coerce GLOB to string in concat at test.pl line 7. tbayen@jupiter:\~/Projekte/DurstHack$ ******************************************************
Fixed in bleedperl by the patch below. Dave.
-- Technology is dominated by two types of people: those who understand what they do not manage\, and those who manage what they do not understand.
Change 22160 by davem@davem-percy on 2004/01/15 23:49:02
buigid #24905 - the code planted to call glob() retained an extraneous targ index in a pushmark op\, leasing to strangeness when the op was freed
Affected files ...
... //depot/perl/op.c#596 edit
Differences ...
==== //depot/perl/op.c#596 (text) ====
@@ -5332\,6 +5332\,7 @@ o->op_ppaddr = PL_ppaddr[OP_LIST]; cLISTOPo->op_first->op_type = OP_PUSHMARK; cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK]; + cLISTOPo->op_first->op_targ = 0; o = newUNOP(OP_ENTERSUB\, OPf_STACKED\, append_elem(OP_LIST\, o\, scalar(newUNOP(OP_RV2CV\, 0\,
@iabyn - Status changed from 'open' to 'resolved'
Migrated from rt.perl.org#24905 (status was 'resolved')
Searchable as RT24905$