Don't wrap an ErrorInst as a subpattern of another pattern #5542
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When a pattern is an error, avoid wrapping it as a subpattern in a RefParamPattern or VarPattern. This allows further error handling to observe the error occurred without having to unwrap it.
This avoids a crash when an invalid associated constant is written which has a VarPattern in it. The associated constant machinery expects an AssociatedConstantDecl but was getting a VarPattern with an ErrorInst inside. Now it receives an ErrorInst directly, which it is already looking for.
This choice means that
var
statements in aninterface
will always be diagnosed as being non-constant, or as being a constant with avar
, so we don't need an extra diagnostic saying thatvar
is not allowed in an interface, as this just leads to two diagnostics on the same thing.This crash was found by a fuzzer.