unfinished-fiber-with-nested-try-catch.phpt 911 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --TEST--
  2. Test unfinished fiber with nested try/catch blocks
  3. --FILE--
  4. <?php
  5. $fiber = new Fiber(function (): void {
  6. try {
  7. try {
  8. try {
  9. echo "fiber\n";
  10. echo Fiber::suspend();
  11. echo "after await\n";
  12. } catch (Throwable $exception) {
  13. echo "inner exit exception caught!\n";
  14. }
  15. } catch (Throwable $exception) {
  16. echo "exit exception caught!\n";
  17. } finally {
  18. echo "inner finally\n";
  19. }
  20. } finally {
  21. echo "outer finally\n";
  22. }
  23. echo "unreached\n";
  24. try {
  25. echo Fiber::suspend();
  26. } finally {
  27. echo "unreached\n";
  28. }
  29. echo "end of fiber should not be reached\n";
  30. });
  31. $fiber->start();
  32. unset($fiber); // Destroy fiber object, executing finally block.
  33. echo "done\n";
  34. ?>
  35. --EXPECT--
  36. fiber
  37. inner finally
  38. outer finally
  39. done