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

Type-check aliasing in separate pass #1977

Merged
merged 20 commits into from Jul 4, 2023
Merged

Type-check aliasing in separate pass #1977

merged 20 commits into from Jul 4, 2023

Conversation

athas
Copy link
Member

@athas athas commented Jul 3, 2023

This significantly simplifies the type checker, and also fixes known
(and future) bugs related to tracking aliases of an incompletely typed
term.

This also allows us to provide better error messages, although it's
possible that they are currently slightly worse, as the aliasing
checking does not use the "context" mechanism of the term-level type
checker.

The AST itself is simplified because it no longer has to embed alias
information (which wasn't correct anyway, and was not actually used).

There is one user-visible change: lambdas that must return an
alias-free result will now require a return type annotation. We may
loosen this in the future, but it is a very rare case in practice.

Closes #1872.

@athas
Copy link
Member Author

athas commented Jul 3, 2023

One piece of functionality is missing: all variables are now reported as unused, because the alias checking machinery did double duty as a usage checker. That'll need its own mechanism now.

@athas athas added the run-benchmarks Makes GA run the benchmark suite. label Jul 3, 2023
@athas athas merged commit 8186b89 into master Jul 4, 2023
29 checks passed
@athas athas deleted the issue1872 branch July 4, 2023 07:02
razetime pushed a commit to razetime/futhark that referenced this pull request Jul 16, 2023
This significantly simplifies the type checker, and also fixes known
(and future) bugs related to tracking aliases of an incompletely typed
term.

This also allows us to provide better error messages, although it's
possible that they are currently slightly worse, as the aliasing
checking does not use the "context" mechanism of the term-level type
checker.

The AST itself is simplified because it no longer has to embed alias
information (which wasn't correct anyway, and was not actually used).

There is one user-visible change: lambdas that must return an
alias-free result will now require a return type annotation. We may
loosen this in the future, but it is a very rare case in practice.

Closes diku-dk#1872.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
run-benchmarks Makes GA run the benchmark suite.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Do alias/consumption checking in separate type checking pass
1 participant