rust/tests/ui/rfcs
bors 59bb9505bc Auto merge of #103208 - cjgillot:match-fake-read, r=oli-obk,RalfJung
Allow partially moved values in match

This PR attempts to unify the behaviour between `let _ = PLACE`, `let _: TY = PLACE;` and `match PLACE { _ => {} }`.
The logical conclusion is that the `match` version should not check for uninitialised places nor check that borrows are still live.

The `match PLACE {}` case is handled by keeping a `FakeRead` in the unreachable fallback case to verify that `PLACE` has a legal value.

Schematically, `match PLACE { arms }` in surface rust becomes in MIR:
```rust
PlaceMention(PLACE)
match PLACE {
  // Decision tree for the explicit arms
  arms,
  // An extra fallback arm
  _ => {
    FakeRead(ForMatchedPlace, PLACE);
    unreachable
  }
}
```

`match *borrow { _ => {} }` continues to check that `*borrow` is live, but does not read the value.
`match *borrow {}` both checks that `*borrow` is live, and fake-reads the value.

Continuation of ~https://github.com/rust-lang/rust/pull/102256~ ~https://github.com/rust-lang/rust/pull/104844~

Fixes https://github.com/rust-lang/rust/issues/99180 https://github.com/rust-lang/rust/issues/53114
2023-10-27 18:51:43 +00:00
..
rfc-0107-bind-by-move-pattern-guards Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1014-stdout-existential-crisis Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1445-restrict-constants-in-patterns Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1623-static Add a note to duplicate diagnostics 2023-10-05 01:04:41 +00:00
rfc-1717-dllimport Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1789-as-cell
rfc-1857-stabilize-drop-order Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1937-termination-trait Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
rfc-2005-default-binding-mode Do not set up wrong span for adjustments 2023-07-10 20:09:26 +00:00
rfc-2008-non-exhaustive Fix #117033 2023-10-21 23:04:17 +02:00
rfc-2027-object-safe-for-dispatch Only consider object candidates for object-safe dyn types 2023-08-15 01:01:44 +00:00
rfc-2091-track-caller s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rfc-2093-infer-outlives remove trailing dots 2023-10-08 10:06:17 +00:00
rfc-2126-crate-paths Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2126-extern-absolute-paths Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2151-raw-identifiers
rfc-2175-or-if-while-let
rfc-2294-if-let-guard Use PlaceMention for match scrutinees. 2023-10-24 15:30:17 +00:00
rfc-2302-self-struct-ctor Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2306-convert-id Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2361-dbg-macro Use PlaceMention for match scrutinees. 2023-10-24 15:30:17 +00:00
rfc-2396-target_feature-11 Change start to #[start] in some diagnosis 2023-09-22 15:58:43 +02:00
rfc-2397-do-not-recommend Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2421-unreserve-pure-offsetof-sizeof-alignof Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2457-non-ascii-idents Mention the syntax for use on mod foo; if foo doesn't exist 2023-10-21 15:56:01 +00:00
rfc-2497-if-let-chains Address review comments 2023-09-13 15:00:31 +00:00
rfc-2528-type-changing-struct-update Modify primary span label for E0308 2023-01-30 20:12:19 +00:00
rfc-2565-param-attrs Adjust UI tests for unit_bindings 2023-06-12 20:24:48 +08:00
rfc-2627-raw-dylib Rollup merge of #113754 - cjgillot:simplify-foreign, r=petrochenkov 2023-07-19 22:37:07 +05:30
rfc-2632-const-trait-impl Deny providing explicit effect params 2023-10-26 08:24:25 +00:00
rfc-3348-c-string-literals add proc macro test 2023-07-23 10:09:43 +00:00