Front page | perl.perl5.porters |
Postings from July 2012
[perl #114070] here-docs cause bogus line numbers
From:
l . mai @ web . de
Date:
July 10, 2012 15:08
Subject:
[perl #114070] here-docs cause bogus line numbers
Message ID:
rt-3.6.HEAD-11172-1341958107-368.114070-75-0@perl.org
# New Ticket Created by l.mai@web.de
# Please include the string: [perl #114070]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=114070 >
This is a bug report for perl from l.mai@web.de,
generated with the help of perlbug 1.39 running under perl 5.16.0.
-----------------------------------------------------------------
[Please describe your issue here]
% cat bug.pl
#!perl
use warnings;
use strict;
use Test::More tests => 10;
sub lineno {
my ($unique_marker) = @_;
seek DATA, 0, 0 or die "seek: $!";
my $n = 0;
while (my $line = readline DATA) {
$n++;
return $n if $line =~ /\Q$unique_marker/;
}
undef
}
sub test_line {
my ($unique_marker) = @_;
my $perl_line = (caller)[2];
is $perl_line, lineno($unique_marker), qq(line with "$unique_marker");
}
#line 26
test_line '.{A1}.'; $_ = <<EOT; test_line '.{A2}.';
hi
EOT
test_line '.{A3}.';
# This test is the main reason for the #line annotations. It corrupts line
# numbers for all following code.
#line 35
test_line '.{B1}.'; $_ =~ s/^/${\<<EOT}/; test_line '.{B2}.';
hi
EOT
test_line '.{B3}.';
#line 42
test_line '.{C1}.'; is "@{[<<EOT x 0]}", ''; test_line '.{C2}.';
hi
EOT
test_line '.{C3}.';
__DATA__
% prove bug.pl
bug.pl .. 1/10
# Failed test 'line with ".{A2}."'
# at bug.pl line 21.
# got: '28'
# expected: '26'
# Failed test 'line with ".{B3}."'
# at bug.pl line 21.
# got: '36'
# expected: '38'
# Failed test 'line with ".{C3}."'
# at bug.pl line 21.
# got: '43'
# expected: '45'
# Looks like you failed 3 tests of 10.
bug.pl .. Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/10 subtests
Test Summary Report
-------------------
bug.pl (Wstat: 768 Tests: 10 Failed: 3)
Failed tests: 2, 6, 10
Non-zero exit status: 3
Files=1, Tests=10, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.02 cusr 0.00 csys = 0.06 CPU)
Result: FAIL
There are two bugs here:
- (minor): perl records the wrong line number for any statement that starts in
the same line as a here-doc.
- (major): The ${\<<EOT} construct makes perl record wrong line numbers for all
following code in the same file. (Debugging that one is fun.)
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=core
severity=medium
---
This perlbug was built using Perl 5.12.1 - Thu Jun 3 20:09:15 CEST 2010
It is being executed now by Perl 5.16.0 - Mon May 21 12:24:16 CEST 2012.
Site configuration information for perl 5.16.0:
Configured by mauke at Mon May 21 12:24:16 CEST 2012.
Summary of my perl5 (revision 5 version 16 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.38-gentoo-r6, archname=i686-linux
uname='linux nora 2.6.38-gentoo-r6 #1 preempt sat aug 6 03:05:34 cest 2011 i686 amd athlon(tm) 64 processor 3200+ authenticamd gnulinux '
config_args='-Dcc=cgcc -Dprefix=/home/mauke/usr/local -Dman1dir=none -Dman3dir=none -Dinc_version_list=none -Doptimize=-O2 -flto'
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='cgcc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -flto',
cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.6.3', 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='cgcc', ldflags ='-fstack-protector -L/usr/local/lib -O2 -flto'
libpth=/usr/local/lib /lib/../lib /usr/lib/../lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
libc=/lib/libc-2.14.1.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.14.1'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -O2 -flto -L/usr/local/lib -fstack-protector'
Locally applied patches:
SAVEARGV0 - disable magic open in <ARGV>
---
@INC for perl 5.16.0:
/home/mauke/usr/local/lib/perl5/site_perl/5.16.0/i686-linux
/home/mauke/usr/local/lib/perl5/site_perl/5.16.0
/home/mauke/usr/local/lib/perl5/5.16.0/i686-linux
/home/mauke/usr/local/lib/perl5/5.16.0
.
---
Environment for perl 5.16.0:
HOME=/home/mauke
LANG=en_US.UTF-8
LANGUAGE (unset)
LC_COLLATE=POSIX
LD_LIBRARY_PATH=/home/mauke/usr/local/lib
LOGDIR (unset)
PATH=/home/mauke/usr/perlbrew/bin:/home/mauke/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.4.5:/opt/sun-jdk-1.4.2.13/bin:/opt/sun-jdk-1.4.2.13/jre/bin:/opt/sun-jdk-1.4.2.13/jre/javaws:/opt/dmd/bin:/usr/games/bin
PERLBREW_HOME=/home/mauke/.perlbrew
PERLBREW_PATH=/home/mauke/usr/perlbrew/bin
PERLBREW_ROOT=/home/mauke/usr/perlbrew
PERLBREW_VERSION=0.27
PERL_BADLANG (unset)
PERL_UNICODE=SAL
SHELL=/bin/bash
-
[perl #114070] here-docs cause bogus line numbers
by l . mai @ web . de