develooper 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




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About