From 8175bf3ed3b4c5f8d4f59f8c83fdd284a24e4dac Mon Sep 17 00:00:00 2001 From: Zalathar Date: Fri, 24 Jan 2025 21:34:15 +1100 Subject: [PATCH 1/2] Rename test to `unresolvable-upvar-issue-87987.rs` This also suppresses an irrelevant warning, to avoid having to re-bless the output snapshot. --- src/tools/tidy/src/issues.txt | 1 - .../2229_closure_analysis/issue-87987.stderr | 14 -------------- ...-87987.rs => unresolvable-upvar-issue-87987.rs} | 3 ++- 3 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 tests/ui/closures/2229_closure_analysis/issue-87987.stderr rename tests/ui/closures/2229_closure_analysis/{issue-87987.rs => unresolvable-upvar-issue-87987.rs} (83%) diff --git a/src/tools/tidy/src/issues.txt b/src/tools/tidy/src/issues.txt index de3380502bfcd..d746b4551b4cc 100644 --- a/src/tools/tidy/src/issues.txt +++ b/src/tools/tidy/src/issues.txt @@ -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 diff --git a/tests/ui/closures/2229_closure_analysis/issue-87987.stderr b/tests/ui/closures/2229_closure_analysis/issue-87987.stderr deleted file mode 100644 index 5696a010c3f80..0000000000000 --- a/tests/ui/closures/2229_closure_analysis/issue-87987.stderr +++ /dev/null @@ -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 - diff --git a/tests/ui/closures/2229_closure_analysis/issue-87987.rs b/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs similarity index 83% rename from tests/ui/closures/2229_closure_analysis/issue-87987.rs rename to tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs index f79a8f1b57100..03cbe53cbec69 100644 --- a/tests/ui/closures/2229_closure_analysis/issue-87987.rs +++ b/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs @@ -1,8 +1,9 @@ //@ run-pass //@ edition:2021 +#[expect(dead_code)] struct Props { - field_1: u32, //~ WARNING: fields `field_1` and `field_2` are never read + field_1: u32, field_2: u32, } From 6c7e8fefa30688f2a750f738bb78da517c4ffc00 Mon Sep 17 00:00:00 2001 From: Zalathar Date: Mon, 20 Jan 2025 17:05:54 +1100 Subject: [PATCH 2/2] Add some notes and test some more pattern variants --- .../unresolvable-upvar-issue-87987.rs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs b/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs index 03cbe53cbec69..c501e034c97db 100644 --- a/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs +++ b/tests/ui/closures/2229_closure_analysis/unresolvable-upvar-issue-87987.rs @@ -1,3 +1,13 @@ +//! 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 @@ -20,8 +30,16 @@ fn main() { 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!("A"), + [_, _, _, _] => println!("C"), + }; + let _d = || match arr { + [_, .., _] => println!("D"), + }; + let _e = || match arr { + [_, ..] => println!("E"), }; println!("{:#?}", mref);