Skip to content

RequirementMachine: Protocol requirement signature minimization fixes #40465

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

Merged

Conversation

slavapestov
Copy link
Contributor

@slavapestov slavapestov commented Dec 8, 2021

With these changes, more validation tests pass with -requirement-machine-protocol-signatures=verify.

There were a couple of highly-invalid cases where the requirement machine's result was more "correct", so I hacked the GSB just to make a few tests pass. If these GSB changes cause some unforseen breakage, they can be reverted separately without issue.

Also, a couple of optimizations to the homotopy reduction algorithm. It's still too slow.

@slavapestov slavapestov force-pushed the rqm-protocol-minimization-fixes branch from f7880c4 to 169b941 Compare December 8, 2021 04:43
…ules

This is a source-level error, not an invariant violation. Instead, plumb
a new hadError() flag, which in the future will assert if no diagnostic
was produced.
When a rule is replaced by a rewrite path, if the rule is in context
then every step of the replacement step is necessarily always in context.

The only way new rules in empty context can be introduced by a
replacement is if the original rewrite step being replaced had no
context.

Therefore, loops that do not contain rules in empty context will
never provide any additional information during homotopy reduction.
…alized

When a rewrite rule is replaced with a path containing ::Adjust, ::Decompose,
::ConcreteConformance or ::SuperclassConformance rewrite steps, the steps
will get a non-zero EndOffset if the original rule appears in a step with a
non-zero EndOffset.

For this reason, these steps must work with a non-zero EndOffset, which
primarily means computing correct offsets into the term being manipulated.
…ment-machine-protocol-signatures=verify for now
This doesn't actually matter, except to make the requirement machine
minimization cross-checking work on highly-invalid test cases.
This doesn't actually matter, except to make requirement machine
minimization cross-checking work on highly invalid code with
duplicate associated type declarations in the same protocol.
@slavapestov slavapestov force-pushed the rqm-protocol-minimization-fixes branch from 169b941 to 8a08872 Compare December 8, 2021 05:53
@slavapestov
Copy link
Contributor Author

@swift-ci Please smoke test

@slavapestov
Copy link
Contributor Author

@swift-ci Please test source compatibility

@slavapestov
Copy link
Contributor Author

@swift-ci Please smoke test Linux

@slavapestov slavapestov merged commit cfd8dbf into swiftlang:main Dec 8, 2021
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.

1 participant