This is a bug report for perl from [EMAIL PROTECTED],
generated with the help of perlbug 1.35 running under perl v5.8.6.
-----------------------------------------------------------------
[Please enter your report here]

Attached is test case that when run under Test::Harness and
Devel::Cover will cause Carp to go into infinite recursion. Also
attached is a patch to Carp which will prevent the infinite
recursion. (Apparently defined() will trigger the overload, but ref() will not)

The combination of Devel::Cover, Test::Harness, overloading and if
modifiers cause overloading to be triggered, which in this case
results in Carp going haywire.

The first set of output is without Devel::Cover, the second is with
it. For some reason overloading is triggered by the if modifier; the
same statement with if () BLOCK doesnt trigger the overloading.

Anyway, ive cc'ed this to the three parties who seem to be involved.
Sorry for the noise if that was wrong.

Example output:

D:\dev\DC_test\Dummy>set HARNESS_PERL_SWITCHES=

D:\dev\DC_test\Dummy>nmake test

Microsoft (R) Program Maintenance Utility Version 7.00.9955
Copyright (C) Microsoft Corporation.  All rights reserved.

        D:\ASPerl\811\bin\perl.exe "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib\lib', 'blib\arch')" t\Dummy.t
t\Dummy....ok
All tests successful.
Files=1, Tests=3,  0 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)

D:\dev\DC_test\Dummy>set HARNESS_PERL_SWITCHES=-MDevel::Cover

D:\dev\DC_test\Dummy>nmake test

Microsoft (R) Program Maintenance Utility Version 7.00.9955
Copyright (C) Microsoft Corporation.  All rights reserved.

        D:\ASPerl\811\bin\perl.exe "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib\lib', 'blib\arch')" t\Dummy.t
t\Dummy....ok 2/3
The overloaded method bool was called at t\Dummy.t line 11
        T::__ANON__[t\Dummy.t:11]('T=HASH(0x2296364)', 'undef', '')
called at D:\dev\DC_test\Dummy\blib\lib/Dummy.pm line 20
        Dummy::test('T=HASH(0x2296364)') called at t\Dummy.t line 5
# Looks like you planned 3 tests but only ran 2.
# Looks like your test died just after 2.
t\Dummy....dubious
        Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED test 3
        Failed 1/3 tests, 66.67% okay
Failed Test Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
t\Dummy.t    255 65280     3    2  66.67%  3
Failed 1/1 test scripts, 0.00% okay. 1/3 subtests failed, 66.67% okay.
NMAKE : fatal error U1077: 'D:\ASPerl\811\bin\perl.exe' : return code '0x2'
Stop.

D:\dev\DC_test\Dummy>

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

Configured by ActiveState at Mon Dec 13 09:51:32 2004.

Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
  Platform:
    osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    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='cl', ccflags ='-nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32
-D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT  -DNO_HASH_SEED
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO
-DPERL_MSVCRT_READFIX',
    optimize='-MD -Zi -DNDEBUG -O1',
    cppflags='-DWIN32'
    ccversion='', gccversion='', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
    ivtype='long', ivsize=4, nvtype='double', nvsize=8,
Off_t='__int64', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf 
-libpath:"D:\ASPerl\811\lib\CORE"  -machine:x86'
    libpth=\lib
    libs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib 
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib
odbc32.lib odbccp32.lib msvcrt.lib
    perllibs=  oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib 
version.lib odbc32.lib odbccp32.lib msvcrt.lib
    libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
    gnulibc_version='undef'
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug
-opt:ref,icf  -libpath:"D:\ASPerl\811\lib\CORE"  -machine:x86'

Locally applied patches:
    ACTIVEPERL_LOCAL_PATCHES_ENTRY
    21540 Fix backward-compatibility issues in if.pm
    23565 Wrong MANIFEST.SKIP

---
@INC for perl v5.8.6:
    D:/ASPerl/811/lib
    D:/ASPerl/811/site/lib
    .

---
Environment for perl v5.8.6:
    HOME (unset)
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    
PATH=C:\Util\UEdit;C:\dotNet\Common7\IDE;C:\dotNet\VC7\BIN;C:\dotNet\Common7\Tools;C:\dotNet\Common7\Tools\bin\prerelease;C:\dotNet\Common7\Tools\bin;C:\dotNet\FrameworkSDK\bin;C:\WINNT\Microsoft.NET\Framework\v1.0.3705;C:\Util\UEdit;c:\imagemagick-6.2.1-q16;D:\Py\Python24;D:\ASPerl\811\bin;D:\ASPerl\638\bin;C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\wbem;d:\svn\bin;C:\cygwin\bin;C:\Util\totalcmd;C:\Util\7-Zip;C:\Util\GTK\2.0\bin
    PERL_BADLANG (unset)
    SHELL (unset)
--- lib\Carp\Heavy.pm.bak	2004-12-13 08:49:10.000000000 +0100
+++ lib\Carp\Heavy.pm	2005-09-09 21:03:52.187500000 +0200
@@ -43,11 +43,10 @@
 # Transform an argument to a function into a string.
 sub format_arg {
   my $arg = shift;
-  if (not defined($arg)) {
-    $arg = 'undef';
-  }
-  elsif (ref($arg)) {
+  if (ref($arg)) {
       $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg";
+  }elsif (not defined($arg)) {
+    $arg = 'undef';
   }
   $arg =~ s/'/\\'/g;
   $arg = str_len_trim($arg, $MaxArgLen);

Attachment: Dummy-1.tar.gz
Description: GNU Zip compressed data

Reply via email to