mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
Rollup merge of #135985 - Zalathar:whats-upvar, r=lqd
Rename test to `unresolvable-upvar-issue-87987.rs` and add some notes Extracted from #135756. I had to figure out what this test was trying to test, so I might as well write it down for future reference.
This commit is contained in:
commit
eb3e1c9ee1
@ -409,7 +409,6 @@ ui/closure_context/issue-26046-fn-once.rs
|
||||
ui/closure_context/issue-42065.rs
|
||||
ui/closures/2229_closure_analysis/issue-118144.rs
|
||||
ui/closures/2229_closure_analysis/issue-87378.rs
|
||||
ui/closures/2229_closure_analysis/issue-87987.rs
|
||||
ui/closures/2229_closure_analysis/issue-88118-2.rs
|
||||
ui/closures/2229_closure_analysis/issue-88476.rs
|
||||
ui/closures/2229_closure_analysis/issue-89606.rs
|
||||
|
@ -1,27 +0,0 @@
|
||||
//@ run-pass
|
||||
//@ edition:2021
|
||||
|
||||
struct Props {
|
||||
field_1: u32, //~ WARNING: fields `field_1` and `field_2` are never read
|
||||
field_2: u32,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Test 1
|
||||
let props_2 = Props { field_1: 1, field_2: 1 };
|
||||
|
||||
let _ = || {
|
||||
let _: Props = props_2;
|
||||
};
|
||||
|
||||
// Test 2
|
||||
let mut arr = [1, 3, 4, 5];
|
||||
|
||||
let mref = &mut arr;
|
||||
|
||||
let _c = || match arr {
|
||||
[_, _, _, _] => println!("A"),
|
||||
};
|
||||
|
||||
println!("{:#?}", mref);
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
warning: fields `field_1` and `field_2` are never read
|
||||
--> $DIR/issue-87987.rs:5:5
|
||||
|
|
||||
LL | struct Props {
|
||||
| ----- fields in this struct
|
||||
LL | field_1: u32,
|
||||
| ^^^^^^^
|
||||
LL | field_2: u32,
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: `#[warn(dead_code)]` on by default
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
@ -0,0 +1,46 @@
|
||||
//! When a closure syntactically captures a place, but doesn't actually capture
|
||||
//! it, make sure MIR building doesn't ICE when handling that place.
|
||||
//!
|
||||
//! Under the Rust 2021 disjoint capture rules, this sort of non-capture can
|
||||
//! occur when a place is only inspected by infallible non-binding patterns.
|
||||
|
||||
// FIXME(#135985): On its own, this test should probably just be check-pass.
|
||||
// But there are few/no other tests that use non-binding array patterns and
|
||||
// invoke the later parts of the compiler, so building/running has some value.
|
||||
|
||||
//@ run-pass
|
||||
//@ edition:2021
|
||||
|
||||
#[expect(dead_code)]
|
||||
struct Props {
|
||||
field_1: u32,
|
||||
field_2: u32,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Test 1
|
||||
let props_2 = Props { field_1: 1, field_2: 1 };
|
||||
|
||||
let _ = || {
|
||||
let _: Props = props_2;
|
||||
};
|
||||
|
||||
// Test 2
|
||||
let mut arr = [1, 3, 4, 5];
|
||||
|
||||
let mref = &mut arr;
|
||||
|
||||
// These array patterns don't need to inspect the array, so the array
|
||||
// isn't captured.
|
||||
let _c = || match arr {
|
||||
[_, _, _, _] => println!("C"),
|
||||
};
|
||||
let _d = || match arr {
|
||||
[_, .., _] => println!("D"),
|
||||
};
|
||||
let _e = || match arr {
|
||||
[_, ..] => println!("E"),
|
||||
};
|
||||
|
||||
println!("{:#?}", mref);
|
||||
}
|
Loading…
Reference in New Issue
Block a user