develooper Front page | perl.perl5.porters | Postings from June 2012

[perl #113794] "in cleanup" warnings generated from destructor errors are no longer enabled by "use warnings"

Thread Next
From:
Jesse Luehrs
Date:
June 22, 2012 14:44
Subject:
[perl #113794] "in cleanup" warnings generated from destructor errors are no longer enabled by "use warnings"
Message ID:
rt-3.6.HEAD-5009-1340401482-1719.113794-75-0@perl.org
# New Ticket Created by  Jesse Luehrs 
# Please include the string:  [perl #113794]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=113794 >



This is a bug report for perl from doy@tozt.net,
generated with the help of perlbug 1.39 running under perl 5.16.0.


-----------------------------------------------------------------
[Please describe your issue here]


../bisect.pl --start=v5.12.4 --end=v5.14.2 --expect-fail -e \
    'BEGIN { $SIG{ __WARN__} = sub { exit 1 if $_[0] =~ /in cleanup/ }; }
     use strict; use warnings;
     package A;
     sub new { bless {}, "A"}; sub DESTROY { warn 1; die 2; }
     { my $a = A ->new }'

returns this:

96d9b9cd40f1d98fda790eb12b5cdbeef8b48a81 is the first bad commit
commit 96d9b9cd40f1d98fda790eb12b5cdbeef8b48a81
Author: Zefram <zefram@fysh.org>
Date:   Tue Apr 20 21:32:53 2010 +0100

    make die reliably hand error to post-eval code

    Put the exception into $@ last thing before longjmping to the op following
    the eval block, where previously it went into $@ before unwinding the
    stack.  This change means that the exception is not liable to be lost
    by $@ being clobbered by destructors, cleanup code, or restoration after
    "local $@".  The code running immediately after eval can now rely on $@
    accurately indicating the exception status of the eval.

:100644 100644 5ca4f13aa00796d3864bcc7258510dd7de56986d 6ae162687a665f15ba1c38080a58c8cc310b65a4 M      MANIFEST
:100644 100644 d62d58ada367650c283a1219cf573905d85cbecb 921688d656fcc00f7705487138e247f13d7d0127 M      pp_ctl.c
:040000 040000 14e682d7e45cbebfcef4e4a0b14861aa6ad7651c facef45a345cb919ad8120eaabd0711469c9b564 M      t
bisect run success
That took 1839 seconds


But this still warns:

$ perl -we 'package A; sub new { bless {}, "A" } sub DESTROY { die "foo" }
            { my $a = A->new }'
        (in cleanup) foo at -e line 1.


This seems unintentional. The code seems to still be using the 'misc'
warnings category, so I'm not sure why "use warnings" no longer enables
it.


[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
    category=core
    severity=low
---
Site configuration information for perl 5.16.0:

Configured by doy at Sat Jun  2 13:46:21 CDT 2012.

Summary of my perl5 (revision 5 version 16 subversion 0) configuration:
   
  Platform:
    osname=linux, osvers=3.3.5-1-arch, archname=x86_64-linux
    uname='linux xtahua 3.3.5-1-arch #1 smp preempt mon may 7 19:57:51 cest 2012 x86_64 gnulinux '
    config_args='-de -Dprefix=/home/doy/perl5/perlbrew/perls/perl-5.16.0'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.7.0 20120505 (prerelease)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    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.15.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.15'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'

Locally applied patches:
    

---
@INC for perl 5.16.0:
    /home/doy/perl5/local/
    /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/x86_64-linux
    /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0
    /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/x86_64-linux
    /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0
    .

---
Environment for perl 5.16.0:
    HOME=/home/doy
    LANG=en_US.UTF-8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/doy/perl5/perlbrew/bin:/home/doy/perl5/perlbrew/perls/perl-5.16.0/bin:/home/doy/.bin/marathon:/home/doy/.bin/nethack:/home/doy/.bin/ghc:/home/doy/.bin:/usr/local/sbin:/usr/local/bin:/usr/lib/ccache/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl
    PERL5LIB=/home/doy/perl5/local/
    PERLBREW_BASHRC_VERSION=0.33
    PERLBREW_HOME=/home/doy/.perlbrew
    PERLBREW_MANPATH=/home/doy/perl5/perlbrew/perls/perl-5.16.0/man
    PERLBREW_PATH=/home/doy/perl5/perlbrew/bin:/home/doy/perl5/perlbrew/perls/perl-5.16.0/bin
    PERLBREW_PERL=perl-5.16.0
    PERLBREW_ROOT=/home/doy/perl5/perlbrew
    PERLBREW_VERSION=0.43
    PERL_BADLANG (unset)
    PERL_CPANM_OPT=-q --mirror file:///home/doy/perl5/minicpan/ --mirror http://mirrors.kernel.org/cpan/ --mirror http://search.cpan.org/CPAN --prompt
    SHELL=/bin/zsh


Thread Next


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