Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
c6a97d3
emit `StorageLive` and schedule `StorageDead` for `let`-`else` after …
dianne Jun 25, 2025
5a5027a
Move float non determinism helpers to math.rs
LorrensP-2158466 Jul 7, 2025
4653b7a
Stabilize const `TypeId::of`
oli-obk Jul 18, 2025
ed50029
ci: Switch to nightly rustfmt
tgross35 Jul 21, 2025
f391acb
Implement nondet behaviour and change/add tests.
LorrensP-2158466 Jul 7, 2025
08bca4d
ci: Add native PowerPC64LE and s390x jobs
tgross35 Jul 23, 2025
fcc7824
ci: Update to the latest ubuntu:25.04 Docker images
tgross35 Jul 24, 2025
95c4263
symcheck: Switch the `object` dependency from git to crates.io
tgross35 Jul 24, 2025
83aea65
ci: Use a mirror for musl
tgross35 Jul 24, 2025
5c4abe9
ci: Upgrade ubuntu:25.04 for the PowerPC64LE test
tgross35 Jul 24, 2025
43c3e1b
Enable tests that were skipped on PowerPC
tgross35 Jul 24, 2025
b168793
Enable tests that were skipped on aarch64
tgross35 Jul 24, 2025
0b6c1d3
Enable skipped `f32` and `f64` multiplication tests
tgross35 Jul 24, 2025
9dad77f
Use `x86_no_sse` configuration in more places
tgross35 Jul 24, 2025
4743158
libm: Update for new warn-by-default clippy lints
tgross35 Jul 26, 2025
c061e73
Avoid inlining `floor` into `rem_pio2`
quaternic Jul 27, 2025
9c683d3
Implement `floor` and `ceil` in assembly on `i586`
folkertdev Jul 27, 2025
16cb37c
Remove `no-asm` gating when there is no alternative implementation
tgross35 Jul 25, 2025
54f6ab7
Switch to using a GH app for authenticating sync PRs
Kobzol Jul 29, 2025
54a4f86
cleanup: Trim trailing whitespace
tgross35 Jul 29, 2025
97c35d3
ci: Simplify tests for verbatim paths
tgross35 Jul 29, 2025
987a49b
bootstrap: extract `cc` query into a new function
mati865 Jul 29, 2025
9cfe5f6
bootstrap: split runtime DLL part out of `make_win_dist`
mati865 Jul 29, 2025
ab8a2e1
ci: Switch to strongly typed directives
tgross35 Jul 30, 2025
eafafc4
ci: Don't print output twice in `ci-util`
tgross35 Jul 30, 2025
c045c9b
ci: Commonize the way `PrInfo` is loaded from env
tgross35 Jul 30, 2025
4ebfdf7
ci: Add a way to run `libm` tests that would otherwise be skipped
tgross35 Jul 30, 2025
3cbd088
ci: Set pipefail before running ci-util
tgross35 Jul 30, 2025
ecf6d3c
Simplify the configuration for no-panic
tgross35 Jul 30, 2025
b3f369d
Address some rustc inconsistency issues
zeroomega Jul 17, 2025
f95edbe
move gcc config parsing to parse_inner
Shourya742 Jul 30, 2025
3f9bf57
move dist to parse_inner
Shourya742 Jul 30, 2025
924912c
move target parsing to parse_inner
Shourya742 Jul 30, 2025
89219ff
move install to parse_inner
Shourya742 Jul 30, 2025
3248ff1
move llvm parsing to parse_inner
Shourya742 Jul 30, 2025
ddd2a54
move rust config to parse_inner
Shourya742 Jul 30, 2025
ae05591
Force initializing ExecutionContext with verbosity and fail_fast mode
Shourya742 Jul 30, 2025
82756fd
Extract TOML config loading and src directory computation into separa…
Shourya742 Jul 30, 2025
f89ea08
Split TOML postprocessing into a separate function
Shourya742 Jul 30, 2025
cfc40de
Override some build TOML values by flags
Shourya742 Jul 30, 2025
8652d96
Fix logging of config skip values
Shourya742 Jul 30, 2025
58a38cd
Fix verbosity setting
Shourya742 Jul 30, 2025
222dfcc
add install default implementation
Shourya742 Aug 1, 2025
bbe7c08
add gcc and dist default implementation
Shourya742 Aug 1, 2025
38ddefa
add llvm default implementation
Shourya742 Aug 1, 2025
8b80cb0
add rust default implementation
Shourya742 Aug 1, 2025
d3d3b10
make llvm toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
c008a4b
make gcc toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
4d2a2c2
make dist toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
ad98550
make install toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
2c96132
make build toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
a75326b
move build config to the top of parse method
Shourya742 Aug 1, 2025
39d9cf7
move install config to the top of parse method
Shourya742 Aug 1, 2025
120d93e
move rust config to the top of parse method
Shourya742 Aug 1, 2025
f74f1a0
move llvm config to the top of parse method
Shourya742 Aug 1, 2025
7f20ad8
move dist and gcc config to the top of parse method
Shourya742 Aug 1, 2025
d2cfe48
remove feature gate
Kivooeo Aug 4, 2025
b7f5392
remove begin prefix
Kivooeo Aug 4, 2025
91e606b
Tweak auto trait errors
estebank Feb 28, 2025
d2e3ea9
windows-gnullvm: include `libunwind.dll` in dist
mati865 Jul 29, 2025
36383dd
[win][arm64ec] Fix msvc-wholearchive for Arm64EC
dpaoliello Aug 5, 2025
33cb419
Mark all deprecation lints in name resolution as deny-by-default and …
petrochenkov Jul 14, 2025
3b50253
compiler-builtins: plumb LSE support for aarch64 on linux
pmur Aug 4, 2025
6936bb9
Dynamically enable LSE for aarch64 rust provided intrinsics
pmur Jul 31, 2025
fbc700f
configure: Use `CARGO_CFG_*_{F16,F128}` rather than invoking rustc
tgross35 Aug 5, 2025
962836d
remove redundant _toml suffix and other misc changes
Shourya742 Aug 4, 2025
9ccc9f1
replace version placeholder
BoxyUwU Aug 4, 2025
2108631
bump stage0
BoxyUwU Aug 6, 2025
351e4bd
handle bootstrap cfgs
BoxyUwU Aug 6, 2025
6e7b9d5
Introduce ModernIdent type to unify macro 2.0 hygiene handling
xizheyin Aug 6, 2025
2472d19
Include allocator module in LLVM_passes timer
bjorn3 Aug 6, 2025
ee38bc0
Remove unused field from ModuleConfig
bjorn3 Aug 6, 2025
6fbea4f
Remove bitcode_llvm_cmdline
bjorn3 Aug 6, 2025
71add2f
Change stdlib float tests to account for miri nondet floats.
LorrensP-2158466 Jul 13, 2025
7bc3462
tidy
BoxyUwU Aug 6, 2025
270c1a4
Revert "Embed GDB pretty printers in rlibs and dylibs"
bjorn3 Aug 6, 2025
e02cc40
Revert "Preserve the .debug_gdb_scripts section"
bjorn3 Aug 6, 2025
4ff22dd
Move some TypeVisitable/TypeFoldable impls to rustc_type_ir
flodiebold Nov 10, 2024
856e381
don't schedule unnecessary drops when lowering or-patterns
dianne Jul 9, 2025
ea1eca5
base drop order on the first sub-branch
dianne Jul 9, 2025
b7de539
lower bindings in the order they're written
dianne Jul 10, 2025
f7ad406
Port `#[should_panic]` to the new attribute parsing infrastructure
JonathanBrouwer Jul 11, 2025
4281e05
Changes to the tests for the `#[should_panic]` port
JonathanBrouwer Jul 11, 2025
a8f6528
Add a missing UpcastFrom impl in rustc_type_ir
flodiebold Nov 10, 2024
eac66a5
Rollup merge of #137831 - estebank:auto-trait-err, r=compiler-errors
Zalathar Aug 7, 2025
097cf05
Rollup merge of #143028 - dianne:let-else-storage, r=oli-obk,traviscross
Zalathar Aug 7, 2025
3720016
Rollup merge of #143764 - dianne:primary-binding-drop-order, r=Nadrie…
Zalathar Aug 7, 2025
9a4ee32
Rollup merge of #143808 - JonathanBrouwer:should_panic_parser, r=jdon…
Zalathar Aug 7, 2025
481ac14
Rollup merge of #143906 - LorrensP-2158466:miri-float-nondet-foreign-…
Zalathar Aug 7, 2025
ac6dcc1
Rollup merge of #143929 - petrochenkov:depresolve, r=lcnr
Zalathar Aug 7, 2025
69aa48a
Rollup merge of #144133 - oli-obk:stabilize-const-type-id, r=lcnr
Zalathar Aug 7, 2025
1bc0fda
Rollup merge of #144439 - xizheyin:symbol-rs, r=petrochenkov
Zalathar Aug 7, 2025
152548a
Rollup merge of #144473 - zeroomega:rustc_inconsistency, r=Mark-Simul…
Zalathar Aug 7, 2025
444c033
Rollup merge of #144659 - mati865:gnullvm-vendor-libunwind, r=Kobzol
Zalathar Aug 7, 2025
a1b3eb4
Rollup merge of #144705 - pmur:murp/aarch64-lse, r=Amanieu
Zalathar Aug 7, 2025
0d2f25c
Rollup merge of #144807 - Shourya742:2025-07-30-streamline-config, r=…
Zalathar Aug 7, 2025
e3340d4
Rollup merge of #144900 - Kivooeo:unsigned_signed_diff-stabilize, r=d…
Zalathar Aug 7, 2025
7fc0903
Rollup merge of #144903 - Kivooeo:panic_handler-is-not-begin, r=m-ou-se
Zalathar Aug 7, 2025
d11ec13
Rollup merge of #144931 - dpaoliello:msvc-wholearchive, r=jieyouxu
Zalathar Aug 7, 2025
3836e9d
Rollup merge of #144974 - tgross35:update-builtins, r=tgross35
Zalathar Aug 7, 2025
c928e00
Rollup merge of #144997 - BoxyUwU:bootstrap_bump, r=Mark-Simulacrum
Zalathar Aug 7, 2025
8d11a6f
Rollup merge of #145004 - bjorn3:remove_unused_fields, r=WaffleLapkin
Zalathar Aug 7, 2025
bc3a3a5
Rollup merge of #145009 - jackh726:ra-next-solver-changes, r=compiler…
Zalathar Aug 7, 2025
a2974c3
Rollup merge of #145014 - bjorn3:revert_preserve_debug_gdb_scripts, r…
Zalathar Aug 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions compiler/rustc_mir_build/src/builder/matches/match_pair.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,19 @@ impl<'tcx> MatchPairTree<'tcx> {
let test_case = match pattern.kind {
PatKind::Missing | PatKind::Wild | PatKind::Error(_) => None,

PatKind::Or { ref pats } => Some(TestCase::Or {
pats: pats.iter().map(|pat| FlatPat::new(place_builder.clone(), pat, cx)).collect(),
}),
PatKind::Or { ref pats } => {
let pats: Box<[FlatPat<'tcx>]> =
pats.iter().map(|pat| FlatPat::new(place_builder.clone(), pat, cx)).collect();
if !pats[0].extra_data.bindings.is_empty() {
// Hold a place for any bindings established in (possibly-nested) or-patterns.
// By only holding a place when bindings are present, we skip over any
// or-patterns that will be simplified by `merge_trivial_subcandidates`. In
// other words, we can assume this expands into subcandidates.
// FIXME(@dianne): this needs updating/removing if we always merge or-patterns
extra_data.bindings.push(super::SubpatternBindings::FromOrPattern);
}
Some(TestCase::Or { pats })
}

PatKind::Range(ref range) => {
if range.is_full_range(cx.tcx) == Some(true) {
Expand Down Expand Up @@ -194,12 +204,12 @@ impl<'tcx> MatchPairTree<'tcx> {

// Then push this binding, after any bindings in the subpattern.
if let Some(source) = place {
extra_data.bindings.push(super::Binding {
extra_data.bindings.push(super::SubpatternBindings::One(super::Binding {
span: pattern.span,
source,
var_id: var,
binding_mode: mode,
});
}));
}

None
Expand Down
133 changes: 97 additions & 36 deletions compiler/rustc_mir_build/src/builder/matches/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
//! This also includes code for pattern bindings in `let` statements and
//! function parameters.

use std::assert_matches::assert_matches;
use std::borrow::Borrow;
use std::mem;
use std::sync::Arc;

use itertools::{Itertools, Position};
use rustc_abi::VariantIdx;
use rustc_data_structures::fx::FxIndexMap;
use rustc_data_structures::stack::ensure_sufficient_stack;
Expand Down Expand Up @@ -545,26 +545,20 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// return: it isn't bound by move until right before enter the arm.
// To handle this we instead unschedule it's drop after each time
// we lower the guard.
// As a result, we end up with the drop order of the last sub-branch we lower. To use
// the drop order for the first sub-branch, we lower sub-branches in reverse (#142163).
let target_block = self.cfg.start_new_block();
let mut schedule_drops = ScheduleDrops::Yes;
let arm = arm_match_scope.unzip().0;
// We keep a stack of all of the bindings and type ascriptions
// from the parent candidates that we visit, that also need to
// be bound for each candidate.
for sub_branch in branch.sub_branches {
if let Some(arm) = arm {
self.clear_top_scope(arm.scope);
}
for (pos, sub_branch) in branch.sub_branches.into_iter().rev().with_position() {
debug_assert!(pos != Position::Only);
let schedule_drops =
if pos == Position::Last { ScheduleDrops::Yes } else { ScheduleDrops::No };
let binding_end = self.bind_and_guard_matched_candidate(
sub_branch,
fake_borrow_temps,
scrutinee_span,
arm_match_scope,
schedule_drops,
);
if arm.is_none() {
schedule_drops = ScheduleDrops::No;
}
self.cfg.goto(binding_end, outer_source_info, target_block);
}

Expand Down Expand Up @@ -978,7 +972,7 @@ struct PatternExtraData<'tcx> {
span: Span,

/// Bindings that must be established.
bindings: Vec<Binding<'tcx>>,
bindings: Vec<SubpatternBindings<'tcx>>,

/// Types that must be asserted.
ascriptions: Vec<Ascription<'tcx>>,
Expand All @@ -993,6 +987,15 @@ impl<'tcx> PatternExtraData<'tcx> {
}
}

#[derive(Debug, Clone)]
enum SubpatternBindings<'tcx> {
/// A single binding.
One(Binding<'tcx>),
/// Holds the place for an or-pattern's bindings. This ensures their drops are scheduled in the
/// order the primary bindings appear. See rust-lang/rust#142163 for more information.
FromOrPattern,
}

/// A pattern in a form suitable for lowering the match tree, with all irrefutable
/// patterns simplified away.
///
Expand Down Expand Up @@ -1208,7 +1211,7 @@ fn traverse_candidate<'tcx, C, T, I>(
}
}

#[derive(Clone, Debug)]
#[derive(Clone, Copy, Debug)]
struct Binding<'tcx> {
span: Span,
source: Place<'tcx>,
Expand Down Expand Up @@ -1434,12 +1437,7 @@ impl<'tcx> MatchTreeSubBranch<'tcx> {
span: candidate.extra_data.span,
success_block: candidate.pre_binding_block.unwrap(),
otherwise_block: candidate.otherwise_block.unwrap(),
bindings: parent_data
.iter()
.flat_map(|d| &d.bindings)
.chain(&candidate.extra_data.bindings)
.cloned()
.collect(),
bindings: sub_branch_bindings(parent_data, &candidate.extra_data.bindings),
ascriptions: parent_data
.iter()
.flat_map(|d| &d.ascriptions)
Expand Down Expand Up @@ -1472,6 +1470,68 @@ impl<'tcx> MatchTreeBranch<'tcx> {
}
}

/// Collects the bindings for a [`MatchTreeSubBranch`], preserving the order they appear in the
/// pattern, as though the or-alternatives chosen in this sub-branch were inlined.
fn sub_branch_bindings<'tcx>(
parents: &[PatternExtraData<'tcx>],
leaf_bindings: &[SubpatternBindings<'tcx>],
) -> Vec<Binding<'tcx>> {
// In the common case, all bindings will be in leaves. Allocate to fit the leaf's bindings.
let mut all_bindings = Vec::with_capacity(leaf_bindings.len());
let mut remainder = parents
.iter()
.map(|parent| parent.bindings.as_slice())
.chain([leaf_bindings])
// Skip over unsimplified or-patterns without bindings.
.filter(|bindings| !bindings.is_empty());
if let Some(candidate_bindings) = remainder.next() {
push_sub_branch_bindings(&mut all_bindings, candidate_bindings, &mut remainder);
}
// Make sure we've included all bindings. For ill-formed patterns like `(x, _ | y)`, we may not
// have collected all bindings yet, since we only check the first alternative when determining
// whether to inline subcandidates' bindings.
// FIXME(@dianne): prevent ill-formed patterns from getting here
while let Some(candidate_bindings) = remainder.next() {
ty::tls::with(|tcx| {
tcx.dcx().delayed_bug("mismatched or-pattern bindings but no error emitted")
});
// To recover, we collect the rest in an arbitrary order.
push_sub_branch_bindings(&mut all_bindings, candidate_bindings, &mut remainder);
}
all_bindings
}

/// Helper for [`sub_branch_bindings`]. Collects bindings from `candidate_bindings` into
/// `flattened`. Bindings in or-patterns are collected recursively from `remainder`.
fn push_sub_branch_bindings<'c, 'tcx: 'c>(
flattened: &mut Vec<Binding<'tcx>>,
candidate_bindings: &'c [SubpatternBindings<'tcx>],
remainder: &mut impl Iterator<Item = &'c [SubpatternBindings<'tcx>]>,
) {
for subpat_bindings in candidate_bindings {
match subpat_bindings {
SubpatternBindings::One(binding) => flattened.push(*binding),
SubpatternBindings::FromOrPattern => {
// Inline bindings from an or-pattern. By construction, this always
// corresponds to a subcandidate and its closest descendants (i.e. those
// from nested or-patterns, but not adjacent or-patterns). To handle
// adjacent or-patterns, e.g. `(x | x, y | y)`, we update the `remainder` to
// point to the first descendant candidate from outside this or-pattern.
if let Some(subcandidate_bindings) = remainder.next() {
push_sub_branch_bindings(flattened, subcandidate_bindings, remainder);
} else {
// For ill-formed patterns like `x | _`, we may not have any subcandidates left
// to inline bindings from.
// FIXME(@dianne): prevent ill-formed patterns from getting here
ty::tls::with(|tcx| {
tcx.dcx().delayed_bug("mismatched or-pattern bindings but no error emitted")
});
};
}
}
}
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum HasMatchGuard {
Yes,
Expand Down Expand Up @@ -2426,11 +2486,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

// Bindings for guards require some extra handling to automatically
// insert implicit references/dereferences.
self.bind_matched_candidate_for_guard(
block,
schedule_drops,
sub_branch.bindings.iter(),
);
// This always schedules storage drops, so we may need to unschedule them below.
self.bind_matched_candidate_for_guard(block, sub_branch.bindings.iter());
let guard_frame = GuardFrame {
locals: sub_branch
.bindings
Expand Down Expand Up @@ -2462,6 +2519,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
)
});

// If this isn't the final sub-branch being lowered, we need to unschedule drops of
// bindings and temporaries created for and by the guard. As a result, the drop order
// for the arm will correspond to the binding order of the final sub-branch lowered.
if matches!(schedule_drops, ScheduleDrops::No) {
self.clear_top_scope(arm.scope);
}

let source_info = self.source_info(guard_span);
let guard_end = self.source_info(tcx.sess.source_map().end_point(guard_span));
let guard_frame = self.guard_context.pop().unwrap();
Expand Down Expand Up @@ -2511,14 +2575,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
let cause = FakeReadCause::ForGuardBinding;
self.cfg.push_fake_read(post_guard_block, guard_end, cause, Place::from(local_id));
}
assert_matches!(
schedule_drops,
ScheduleDrops::Yes,
"patterns with guards must schedule drops"
);
// Only schedule drops for the last sub-branch we lower.
self.bind_matched_candidate_for_arm_body(
post_guard_block,
ScheduleDrops::Yes,
schedule_drops,
by_value_bindings,
);

Expand Down Expand Up @@ -2642,7 +2702,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
fn bind_matched_candidate_for_guard<'b>(
&mut self,
block: BasicBlock,
schedule_drops: ScheduleDrops,
bindings: impl IntoIterator<Item = &'b Binding<'tcx>>,
) where
'tcx: 'b,
Expand All @@ -2661,12 +2720,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// a reference R: &T pointing to the location matched by
// the pattern, and every occurrence of P within a guard
// denotes *R.
// Drops must be scheduled to emit `StorageDead` on the guard's failure/break branches.
let ref_for_guard = self.storage_live_binding(
block,
binding.var_id,
binding.span,
RefWithinGuard,
schedule_drops,
ScheduleDrops::Yes,
);
match binding.binding_mode.0 {
ByRef::No => {
Expand All @@ -2676,13 +2736,14 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
self.cfg.push_assign(block, source_info, ref_for_guard, rvalue);
}
ByRef::Yes(mutbl) => {
// The arm binding will be by reference, so eagerly create it now.
// The arm binding will be by reference, so eagerly create it now. Drops must
// be scheduled to emit `StorageDead` on the guard's failure/break branches.
let value_for_arm = self.storage_live_binding(
block,
binding.var_id,
binding.span,
OutsideGuard,
schedule_drops,
ScheduleDrops::Yes,
);

let rvalue =
Expand Down
8 changes: 6 additions & 2 deletions compiler/rustc_mir_build/src/builder/matches/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ impl<'a, 'b, 'tcx> FakeBorrowCollector<'a, 'b, 'tcx> {

fn visit_candidate(&mut self, candidate: &Candidate<'tcx>) {
for binding in &candidate.extra_data.bindings {
self.visit_binding(binding);
if let super::SubpatternBindings::One(binding) = binding {
self.visit_binding(binding);
}
}
for match_pair in &candidate.match_pairs {
self.visit_match_pair(match_pair);
Expand All @@ -147,7 +149,9 @@ impl<'a, 'b, 'tcx> FakeBorrowCollector<'a, 'b, 'tcx> {

fn visit_flat_pat(&mut self, flat_pat: &FlatPat<'tcx>) {
for binding in &flat_pat.extra_data.bindings {
self.visit_binding(binding);
if let super::SubpatternBindings::One(binding) = binding {
self.visit_binding(binding);
}
}
for match_pair in &flat_pat.match_pairs {
self.visit_match_pair(match_pair);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,11 @@
_8 = &(_2.2: std::string::String);
- _3 = &fake shallow (_2.0: bool);
- _4 = &fake shallow (_2.1: bool);
StorageLive(_12);
StorageLive(_13);
_13 = copy _1;
- switchInt(move _13) -> [0: bb16, otherwise: bb15];
+ switchInt(move _13) -> [0: bb13, otherwise: bb12];
StorageLive(_9);
StorageLive(_10);
_10 = copy _1;
- switchInt(move _10) -> [0: bb12, otherwise: bb11];
+ switchInt(move _10) -> [0: bb9, otherwise: bb8];
}

- bb9: {
Expand All @@ -100,11 +100,11 @@
_8 = &(_2.2: std::string::String);
- _3 = &fake shallow (_2.0: bool);
- _4 = &fake shallow (_2.1: bool);
StorageLive(_9);
StorageLive(_10);
_10 = copy _1;
- switchInt(move _10) -> [0: bb12, otherwise: bb11];
+ switchInt(move _10) -> [0: bb9, otherwise: bb8];
StorageLive(_12);
StorageLive(_13);
_13 = copy _1;
- switchInt(move _13) -> [0: bb16, otherwise: bb15];
+ switchInt(move _13) -> [0: bb13, otherwise: bb12];
}

- bb10: {
Expand Down Expand Up @@ -139,7 +139,7 @@
- FakeRead(ForGuardBinding, _6);
- FakeRead(ForGuardBinding, _8);
StorageLive(_5);
_5 = copy (_2.1: bool);
_5 = copy (_2.0: bool);
StorageLive(_7);
_7 = move (_2.2: std::string::String);
- goto -> bb10;
Expand All @@ -152,8 +152,8 @@
StorageDead(_9);
StorageDead(_8);
StorageDead(_6);
- falseEdge -> [real: bb1, imaginary: bb1];
+ goto -> bb1;
- falseEdge -> [real: bb3, imaginary: bb3];
+ goto -> bb2;
}

- bb15: {
Expand Down Expand Up @@ -181,7 +181,7 @@
- FakeRead(ForGuardBinding, _6);
- FakeRead(ForGuardBinding, _8);
StorageLive(_5);
_5 = copy (_2.0: bool);
_5 = copy (_2.1: bool);
StorageLive(_7);
_7 = move (_2.2: std::string::String);
- goto -> bb10;
Expand All @@ -194,8 +194,8 @@
StorageDead(_12);
StorageDead(_8);
StorageDead(_6);
- falseEdge -> [real: bb3, imaginary: bb3];
+ goto -> bb2;
- falseEdge -> [real: bb1, imaginary: bb1];
+ goto -> bb1;
}

- bb19: {
Expand Down
Loading