This is because the fact of being an :outer sub promotes its context's C<RetContinuation> to a C<Continuation>, whether or not it ever creates a closure. When the C<Continuation> is invoked to return, it does no unwinding, leaving the control stack untouched on exit. The action is effectively popped (and leaked, I'll wager), but it is never executed.
To illustrate the problem, the attached mod to the "pushaction, sub exit" case is sufficient to prevent the action from ever being called. Turning C<RetContinuation> into a non-agressive "use at most once" continuation as suggested on 4-Feb-06 (see L<http://xrl.us/jwtt>) would certainly fix the problem, by avoiding the need for context promotion altogether. So that would be another bug fixed by this proposal. Unfortunately, I have even less time to put into it now, so I have decided to work around it for the time being. -- Bob Rogers http://rgrjr.dyndns.org/
Index: t/pmc/exception.t =================================================================== --- t/pmc/exception.t (revision 11790) +++ t/pmc/exception.t (working copy) @@ -403,7 +403,7 @@ print "foo\n" .end -.sub action +.sub action :outer(foo) .param int i print "in action I5 = " print i