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

Refactor stubbing so Kani compiler only invoke rustc once per crate #3245

Merged
merged 12 commits into from
Jun 10, 2024

Conversation

celinval
Copy link
Contributor

@celinval celinval commented Jun 9, 2024

Using stubs or function contracts as part of the verify-std sub-command does not work with multiple rustc executions as previous implementation. This happens because we now enable verifying dependencies, and cargo crashes due to a race condition. As soon as the first rustc invocation succeeds, cargo starts the compilation of the dependents crate. However, new executions can override files.

Instead, we moved the stub logic to the new transformation framework, which is done on the top of the StableMIR body, and doesn't affect the Rust compiler session. We are now able to apply stub without restarting the compiler. This is a much better user experience as well, since multiple calls to the compiler can print the same warnings multiple times.

Resolves #3072
Towards #3152

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.

1. Change KaniCompiler to only run rustc once.
2. Move harness grouping to new codegen_units module.
3. Iterate over the codegen units.

Verification of code without stubbing now works. Next step is to move
the transformation to the new framework.
Still missing some validation and foreign function support
Need to adjust tests
@celinval celinval requested a review from a team as a code owner June 9, 2024 20:31
@github-actions github-actions bot added the Z-BenchCI Tag a PR to run benchmark CI label Jun 9, 2024
Copy link
Contributor

@jaisnan jaisnan left a comment

Choose a reason for hiding this comment

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

Thank you :D ! It's a big refactor but the regressions passing gives me enough confidence to approve the change. I would like to see some examples related to the refactor added to the description if possible, to make why this was necessary a bit more clear.

@celinval celinval enabled auto-merge (squash) June 10, 2024 18:44
@celinval celinval merged commit 7fd6546 into model-checking:main Jun 10, 2024
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Z-BenchCI Tag a PR to run benchmark CI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Migrate stubbing transformation to be performed in the instance body
3 participants