-
Notifications
You must be signed in to change notification settings - Fork 13.1k
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
Expose more information in get_body_with_borrowck_facts
#111840
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These changes look reasonable to me. I cannot promise we'll keep the API around, but I do not foresee this being a maintenance issue for us, so likely some form of it will keep getting provided.
I think they might. They look very similar to some local changes that I have. Thank you very much for the ping. |
please rebase, then we can land this |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@bors r+ |
📌 Commit 6a8112e1f8c02d89fe78667209183f570c502fac has been approved by It is now in the queue for this repository. |
This comment has been minimized.
This comment has been minimized.
@voidc would it be possible to slightly extend this and make the |
The moment a change is done to a PR it is taken off the queue, so nothing is happening for now until I actually review and r+ it again |
I think that the PR should be ready to merge again now, but let's wait for confirmation from @voidc |
Yes, the PR is ready @rustbot ready |
@bors r+ |
…earth Rollup of 5 pull requests Successful merges: - rust-lang#111741 (Use `ObligationCtxt` in custom type ops) - rust-lang#111840 (Expose more information in `get_body_with_borrowck_facts`) - rust-lang#111876 (Roll compiler_builtins to 0.1.92) - rust-lang#111912 (Use `Option::is_some_and` and `Result::is_ok_and` in the compiler ) - rust-lang#111915 (libtest: Improve error when missing `-Zunstable-options`) r? `@ghost` `@rustbot` modify labels: rollup
Depending on what you want to achieve, I don't believe pub trait T {}
struct S<'a>(&'a ());
impl<'a> T for S<'a> {}
fn foo() -> impl T {
let x = ();
S(&x) //~ ERROR `x` does not live long enough
}
The |
Verification tools for Rust such as, for example, Creusot or Prusti would benefit from having access to more information computed by the borrow checker.
As a first step in that direction, #86977 added the
get_body_with_borrowck_facts
API, allowing compiler consumers to obtain amir::Body
with accompanying borrow checker information.At RustVerify 2023, multiple people working on verification tools expressed their need for a more comprehensive API.
While eventually borrow information could be part of Stable MIR, in the meantime, this PR proposes a more limited approach, extending the existing
get_body_with_borrowck_facts
API.In summary, we propose the following changes:
BorrowSet
and theRegionInferenceContext
inBodyWithBorrowckFacts
borrows_out_of_scope_at_location
mapThis is similar to #108328 but smaller in scope.
@smoelius Do you think these changes would also be sufficient for your needs?
r? @oli-obk
cc @JonasAlaif