Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid crash by relaxing TyperState assertion #13150

Merged
merged 1 commit into from
Aug 9, 2021

Conversation

smarter
Copy link
Member

@smarter smarter commented Jul 25, 2021

Flushing a reporter might force error messages (in particular when a
StoreReporter is flushed into a non-StoreReporter), and the TyperState
of the context captured in an error message might already be committed
at this point. In ea6449f I tried to
deal with this by flushing before committing but that's not sufficient
since the reporter we're flushing might contain error messages from a
more deeply nested TyperState. So this commit just relaxes the assertion
(ideally we would also check that only TyperStates created in a
committed TyperState can be committed in one, but keeping track of that
would require an extra field in TyperState).

Fixes #13101.


I nominate this PR for backporting since it fixes a regression with respect to 3.0.0

@smarter smarter added the backport:nominated If we agree to backport this PR, replace this tag with "backport:accepted", otherwise delete it. label Jul 25, 2021
@smarter smarter requested a review from odersky July 25, 2021 17:15
Copy link
Contributor

@odersky odersky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to have an excerpt of the commit message in the code, with a link to the test since the weakened assertion does not have an obvious reason.

Otherwise LGTM

@odersky odersky assigned smarter and unassigned odersky Jul 26, 2021
Flushing a reporter might force error messages (in particular when a
StoreReporter is flushed into a non-StoreReporter), and the TyperState
of the context captured in an error message might already be committed
at this point. In ea6449f I tried to
deal with this by flushing before committing but that's not sufficient
since the reporter we're flushing might contain error messages from a
more deeply nested TyperState. So this commit just relaxes the assertion
(ideally we would also check that only TyperStates created in a
committed TyperState can be committed in one, but keeping track of that
would require an extra field in TyperState).
@smarter smarter enabled auto-merge August 9, 2021 09:56
@smarter smarter merged commit 91a9a02 into scala:master Aug 9, 2021
@smarter smarter deleted the relax-tstate-assert branch August 9, 2021 10:59
@smarter smarter added backport:accepted This PR needs to be backported, once it's been backported replace this tag by "backport:done" and removed backport:nominated If we agree to backport this PR, replace this tag with "backport:accepted", otherwise delete it. labels Aug 13, 2021
smarter added a commit to dotty-staging/dotty that referenced this pull request Aug 28, 2021
An already-committed TyperState might be committed again when errors are
flushed (cf scala#12827, scala#13150) and `commit()` calls `gc()`. This operation
could crash before this commit because we attempted to instantiate type
variables no longer owned by the TyperState. We fix this by clearing
`ownedVars` when committing a TyperState (because after committing it no
longer owns any type variable).

Fixes scala#13407.
@dwijnand dwijnand removed the backport:accepted This PR needs to be backported, once it's been backported replace this tag by "backport:done" label Sep 28, 2021
olsdavis pushed a commit to olsdavis/dotty that referenced this pull request Apr 4, 2022
An already-committed TyperState might be committed again when errors are
flushed (cf scala#12827, scala#13150) and `commit()` calls `gc()`. This operation
could crash before this commit because we attempted to instantiate type
variables no longer owned by the TyperState. We fix this by clearing
`ownedVars` when committing a TyperState (because after committing it no
longer owns any type variable).

Fixes scala#13407.
@Kordyjan Kordyjan added this to the 3.1.0 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

java.lang.AssertionError: assertion failed: Attempt to commit TS[11888X, 11724X, 11481X, 11061X, 10149, 2,
4 participants