-
Notifications
You must be signed in to change notification settings - Fork 13.5k
const-eval: error when initializing a static writes to that static #143084
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
const-eval: error when initializing a static writes to that static #143084
Conversation
@@ -1438,16 +1446,18 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> { | |||
let provenance = src_alloc | |||
.provenance() | |||
.prepare_copy(src_range, dest_offset, num_copies, self) | |||
.map_err(|e| e.to_interp_error(dest_alloc_id))?; | |||
.map_err(|e| e.to_interp_error(src_alloc_id))?; |
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 another drive-by fix, I don't think it makes any sense to use the dest_alloc_id here -- the operation was invoked on the src_alloc, after all.
98b111e
to
ed4f01e
Compare
@bors r+ rollup |
Rollup of 10 pull requests Successful merges: - #142270 (Rustdoc js: even more typechecking improvements) - #142420 (Report infer ty errors during hir ty lowering) - #142671 (add #![rustc_no_implicit_bounds]) - #142721 (Add tracing to `InterpCx::layout_of()` ) - #142818 (Port `#[used]` to new attribute parsing infrastructure) - #143020 (codegen_fn_attrs: make comment more precise) - #143051 (Add tracing to `validate_operand`) - #143060 (Only args in main diag are saved and restored without removing the newly added ones) - #143065 (Improve recovery when users write `where:`) - #143084 (const-eval: error when initializing a static writes to that static) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of #143084 - RalfJung:const-eval-recursive-static-write, r=oli-obk const-eval: error when initializing a static writes to that static Fixes #142404 by also calling the relevant hook for writes, not just reads. To avoid erroring during the actual write of the initial value, we neuter the hook when popping the final stack frame. Calling the hook during writes requires changing its signature since we cannot pass in the entire interpreter any more. While doing this I also realized a gap in #142575 for zero-sized copies on the read side, so I fixed that and added a test. r? `@oli-obk`
Rollup of 10 pull requests Successful merges: - rust-lang/rust#142270 (Rustdoc js: even more typechecking improvements) - rust-lang/rust#142420 (Report infer ty errors during hir ty lowering) - rust-lang/rust#142671 (add #![rustc_no_implicit_bounds]) - rust-lang/rust#142721 (Add tracing to `InterpCx::layout_of()` ) - rust-lang/rust#142818 (Port `#[used]` to new attribute parsing infrastructure) - rust-lang/rust#143020 (codegen_fn_attrs: make comment more precise) - rust-lang/rust#143051 (Add tracing to `validate_operand`) - rust-lang/rust#143060 (Only args in main diag are saved and restored without removing the newly added ones) - rust-lang/rust#143065 (Improve recovery when users write `where:`) - rust-lang/rust#143084 (const-eval: error when initializing a static writes to that static) r? `@ghost` `@rustbot` modify labels: rollup
@rustbot labels +T-lang +relnotes This is a breaking change, though I hope and expect it won't affect too much code. Still, we should probably flag this in the compatibility section of the release notes. Probably, as a process matter, we should have lang FCPed this (it would have been an easy call -- it's clearly a bug fix). I don't feel strongly about perturbing anything here, though, (and I appreciate this having been fixed) so let's just... cc @rust-lang/lang Looking at it, the Reference is already correct. It says:
Can't be any more clear than that. cc @ehuss |
Ah fair, I thought of this as more of a bugfix but I should have gotten confirmation for that. |
Fixes #142404 by also calling the relevant hook for writes, not just reads. To avoid erroring during the actual write of the initial value, we neuter the hook when popping the final stack frame.
Calling the hook during writes requires changing its signature since we cannot pass in the entire interpreter any more.
While doing this I also realized a gap in #142575 for zero-sized copies on the read side, so I fixed that and added a test.
r? @oli-obk