`large_assignments`: Unactionable diagnostics with `-Zinline-mir`
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Tracking issue https://github.com/rust-lang/rust/issues/83518.
Doing cargo build --release will activate -Zinline-mir under the hood (through -Copt-level=3). But it makes large_assignments diagnostics unhelpful, because it can make diagnostics point to library code that the user can't change.
How to reproduce
src/main.rs
#![feature(large_assignments)]
#![deny(large_assignments)]
#![move_size_limit = "1000"]
pub fn main() {
let data = [10u8; 9999];
let cell = std::cell::UnsafeCell::new(data);
std::hint::black_box(cell);
}
# One of:
cargo +nightly build --release
cargo +nightly rustc -- -Zmir-opt-level=1 -Zinline-mir
Actual
Compiling minimal v0.1.0 (/home/martin/src/bin)
error: moving 9999 bytes
--> /home/martin/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cell.rs:2054:9
|
2054 | UnsafeCell { value }
| ^^^^^^^^^^^^^^^^^^^^ value moved from here
|
Expected
Compiling minimal v0.1.0 (/home/martin/src/bin)
error: moving 9999 bytes
--> src/main.rs:7:43
|
7 | let cell = std::cell::UnsafeCell::new(data);
| ^^^^ value moved from here
|
Remarks
The expected diagnostics is given with these commands. Note how -Zinline-mir is deactivated in both cases:
# One of:
cargo +nightly build
cargo +nightly rustc -- -Zmir-opt-level=1
The above test case is ui-testified here.
CC E-mentor @oli-obk who maybe have an idea on how to fix this? (I currently don't.)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the diagnostics with the commands in the report, then inspect compiler/rustc_mir_transform/src/inline.rs and the linked UI test. Compare optimized and non-optimized output for the large_assignments example; done means the diagnostic points to the user’s source location rather than library code when -Zinline-mir is enabled.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100