-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Ensure that THIR unsafety check is done before stealing it #115012
Conversation
r? @b-naber (rustbot has picked a reviewer for you, use r? to override) |
@@ -56,7 +56,8 @@ pub(crate) fn closure_saved_names_of_captured_variables<'tcx>( | |||
/// Construct the MIR for a given `DefId`. | |||
fn mir_build(tcx: TyCtxt<'_>, def: LocalDefId) -> Body<'_> { | |||
// Ensure unsafeck and abstract const building is ran before we steal the THIR. | |||
tcx.ensure_with_value().thir_check_unsafety(def); | |||
tcx.ensure_with_value() |
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.
Unrelated to this PR, but why is this ensure_with_value
🤔
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.
ensure
verifies that the dependency is green, without computing anything if not required.
This means that a query that is ensure
d may need to be computed later if some code needs the result value.
ensure_with_value
verifies that the result is available, computed or loadable from on-disk cache.
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.
Hm.. this means that query side effects can be emitted twice? Once when marking a query green and once when executing the query later to recover the value. I guess we need to make sure that's benign.
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.
This is ok for diagnostics, as they are deduplicated. But this is a blocker for replaying any other side-effect. I've been trying to fix this to re-create DefId, but I'm not satisfied by my design.
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.
There's an option to turn it off though. There's also extra logic for the parallel compiler to avoid emitting side effects multiple times, which is kind of unnecessary then.
How does DefId relate to this?
Representing side effects as forcible queries would avoid this issue, but does require work to support forcing arbitrary keys.
@bors r+ |
⌛ Testing commit 4170ca4 with merge ba7e4ce028604a12acc8fc2632661f115083bff3... |
The job Click to see the possible cause of the failure (guessed by this bot)
|
💔 Test failed - checks-actions |
Retry? Looks to be some CI issue? |
@bors retry |
☀️ Test successful - checks-actions |
Finished benchmarking commit (c9db1f8): comparison URL. Overall result: no relevant changes - no action needed@rustbot label: -perf-regression Instruction countThis benchmark run did not return any relevant results for this metric. Max RSS (memory usage)ResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Binary sizeThis benchmark run did not return any relevant results for this metric. Bootstrap: 635.876s -> 636.596s (0.11%) |
This ensures that THIR unsafety check is done before stealing it by running it on the typeck root instead of on a closure, which does nothing.
Fixes #111520