rust/tests/ui/rfcs
Matthias Krüger f875983035
Rollup merge of #135409 - Shunpoco:issue-133117-ICE-never-false-edge-start-block, r=Nadrieril
Fix ICE-133117: multiple never-pattern arm doesn't have false_edge_start_block

Fixes #133117 , and close fixes #133063 , fixes #130779

In order to fix ICE-133117, at first I needed to tackle to ICE-133063 (this fixed 130779 as well).

### ICE-133063 and ICE-130779
This ICE is caused by those steps:
1. An arm has or-pattern, and all of the sub-candidates are never-pattern
2. In that case, all sub-candidates are removed in remove_never_subcandidates(). So the arm (candidate) has no sub-candidate.
3. In the current implementation, if there is no sub-candidate, the function assigns `pre_binding_block` into the candidate ([here](https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_build/src/builder/matches/mod.rs#L2002-L2004)). However, otherwise_block should be assigned to the candidate as well, because the otherwise_block is unwrapped in multiple place (like in lower_match_tree()). As a result, it causes the panic.

I simply added the same block as pre_binding_block into otherwise_block, but I'm wondering if there is a better block to assign to otherwise_block (is it ok to assign the same block into pre_binding and otherwise?)

### ICE-133117
This is caused by those steps:
1. There are two arms, both are or-pattern and each has one match-pair (in the test code, both are `(!|!)`), and the second arm has a guard.
2. In match_candidate() for the first arm, it expands the second arm’s sub-candidates as well ([here](https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_build/src/builder/matches/mod.rs#L1800-L1805)). As a result, the root candidate of the second arm is not evaluated/modified in match_candidate(). So a false_edge_start_block is not assigned to the candidate.
3. merge_trivial_subcandidates() is called against the candidate for the second arm. It just returns immediately because the candidate has a guard. So a flase_edge_start_block is not assigned to the candidate also in this function.
4. remove_never_subcandidates() is called against the candidate. Since all sub-candidates are never-pattern. they are removed.
5. In lower_match_tree(), since there is no sub-candidate for the candidate, the candidate itself is evaluated in visit_leave_rev ([here](https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_build/src/builder/matches/mod.rs#L1532)). Because the candidate has no false_edge_start_block, it causes the panic.

So I modified the order of if blocks in merge_trivial_subcandidates() to assign a false_edge_start_block if the candidate doesn't have.
2025-01-22 20:37:24 +01:00
..
impl-trait Remove some annotations that just specify the default 2024-02-22 16:56:26 +00:00
rfc-0000-never_patterns address review: modify ICE-133063-never-arm-no-otherwise-block.rs 2025-01-22 01:27:15 +00:00
rfc-0107-bind-by-move-pattern-guards Suggest .clone() in some move errors 2024-04-11 16:41:41 +00:00
rfc-1014-stdout-existential-crisis Remove libc from more tests 2024-04-17 08:36:49 -04:00
rfc-1445-restrict-constants-in-patterns Add more context to fall-through "const pattern of non-structural type" error 2024-12-04 20:29:36 +00:00
rfc-1623-static properly fill a promoted's required_consts 2024-04-23 23:02:54 +02:00
rfc-1717-dllimport Update test directives for wasm32-wasip1 2024-03-11 09:36:35 -07:00
rfc-1789-as-cell [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-1857-stabilize-drop-order [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-1937-termination-trait Remove detail from label/note that is already available in other note 2024-10-29 16:26:57 +00:00
rfc-2005-default-binding-mode [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2008-non-exhaustive Update tests for new TRPL chapter order 2024-11-23 08:57:25 -07:00
rfc-2027-dyn-compatible-for-dispatch UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
rfc-2091-track-caller remove support for the #[start] attribute 2025-01-21 06:59:15 -07:00
rfc-2093-infer-outlives [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2126-crate-paths Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2126-extern-absolute-paths Tweak output of import suggestions 2024-06-13 20:22:21 +00:00
rfc-2151-raw-identifiers [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2175-or-if-while-let [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2294-if-let-guard Also check if let chains with multiple lets in these two tests 2024-11-16 05:01:52 +01:00
rfc-2302-self-struct-ctor [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2306-convert-id [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2361-dbg-macro Remove detail from label/note that is already available in other note 2024-10-29 16:26:57 +00:00
rfc-2396-target_feature-11 Auto merge of #134299 - RalfJung:remove-start, r=compiler-errors 2025-01-21 19:46:20 +00:00
rfc-2421-unreserve-pure-offsetof-sizeof-alignof [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2457-non-ascii-idents [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
rfc-2497-if-let-chains fix ICE on type error in promoted 2024-12-09 15:17:26 +01:00
rfc-2528-type-changing-struct-update Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
rfc-2565-param-attrs Stabilize async closures 2024-12-13 00:04:56 +00:00
rfc-2627-raw-dylib Update tests. 2025-01-07 16:04:14 +01:00
rfc-3348-c-string-literals Update tests to use new proc-macro header 2024-11-27 07:18:25 -08:00
type-alias-impl-trait Remove some annotations that just specify the default 2024-02-22 16:56:26 +00:00
rfc-3391-result-ffi-guarantees.rs lang: Strengthen RFC 3391 guarantees to match T-lang consensus 2024-10-21 00:43:36 -07:00