# New Ticket Created by  Patrick R. Michaud 
# Please include the string:  [perl #59538]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=59538 >


The attached hang.pir file causes imcc to freeze while compiling it.
The code itself is derived from code generated by PCT from 
RT #59410.  There is a runtime logic error in the code -- at runtime
it would be possible for a pop_eh to be executed without
a previous push_eh.  Of course, that shouldn't be enough to
cause imcc to hang.

Commenting out any of the lines marked "xxx" allows the
code to compile.  It's also interesting that the "myfoo *= $I0"
statement is one of these (and is required to evoke the bug), 
even though it's in an entirely different sub.

Pm
.sub 'foo' 
    .local num myfoo
    myfoo = 1.0
    $I0 = 5
    myfoo *= $I0                             ## xxx ?!?
.end


.namespace ["Perl6";"Grammar";"Actions"]
.sub "_block1806"  :anon :lexid("139") 
    get_global $P1808, "$/"
    set $P1809, $P1808["post"]
    unless_null $P1809, vivify_548           ##  xxx
    new $P1809, "Undef"                      ##  xxx
  vivify_548:
    defined $I1811, $P1809
    unless $I1811, for_1807_end              ##  xxx
    new $P1812, 'ExceptionHandler'
    set_addr $P1812, for_1807_next           ##  xxx
    $P1812.'handle_types'(63)                ##  xxx
    push_eh $P1812
    iter $P1810, $P1809
  for_1807:
    unless $P1810, for_1807_end              ##  xxx
    shift $P1813, $P1810
    $P1855 = find_name "_block1814"
    $P1855($P1813)                           ##  xxx
    goto for_1807                            ##  xxx
  for_1807_next:
    goto for_1807                            ##  xxx
  for_1807_end:
    pop_eh
    .return ($P1810)
.end

Reply via email to