IronLanguages / IronLanguages/ironpython3

StackOverflowException with continue from try..except

Open
#1,182 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

core
Dominant language
C#
Stars
2.8k
Forks
316
Avg merge
1d 9h
Merged PRs (30d)
1

Description

When using continue in the except clause of a try/except a StackOverflowException may occur. This seems to occur more frequently when running in 64-bit. Here's a repro which causes the issue somewhat consistently:

def test_gh1628():
    def error():
        raise Exception()

    for _ in range(100000):
        try:
            error()
        except Exception:
            continue

I believe the issue only occurs when the code is interpreted. To reproduce consistently the following change can be applied to the DLR:

LightCompiler.DefaultCompilationThreshold = int.MaxValue;

The issue has been reported a number of times:
https://github.com/IronLanguages/ironpython2/issues/40
https://github.com/IronLanguages/ironpython2/issues/42
https://github.com/IronLanguages/ironpython2/issues/182

As well as a proposed fix:
https://github.com/IronLanguages/main/pull/1167

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the provided test_gh1628 reproduction and the DLR setting LightCompiler.DefaultCompilationThreshold = int.MaxValue, then compare interpreted and compiled execution. Review the referenced DLR pull request and confirm that the repro no longer produces a StackOverflowException, including on 64-bit runs.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, python
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.