Skip to content

Commit 75fb42a

Browse files
committed
or-patterns: use top_pats_hack to make things compile.
1 parent 6579d13 commit 75fb42a

File tree

11 files changed

+21
-22
lines changed

11 files changed

+21
-22
lines changed

src/librustc/hir/intravisit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) {
11031103

11041104
pub fn walk_arm<'v, V: Visitor<'v>>(visitor: &mut V, arm: &'v Arm) {
11051105
visitor.visit_id(arm.hir_id);
1106-
walk_list!(visitor, visit_pat, &arm.pats);
1106+
visitor.visit_pat(&arm.pat);
11071107
if let Some(ref g) = arm.guard {
11081108
match g {
11091109
Guard::If(ref e) => visitor.visit_expr(e),

src/librustc/hir/pat_util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ impl hir::Arm {
170170
// for #42640 (default match binding modes).
171171
//
172172
// See #44848.
173-
self.pats.iter()
173+
self.top_pats_hack().iter()
174174
.filter_map(|pat| pat.contains_explicit_ref_binding())
175175
.max_by_key(|m| match *m {
176176
hir::MutMutable => 1,

src/librustc/middle/dead.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,9 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
259259
}
260260

261261
fn visit_arm(&mut self, arm: &'tcx hir::Arm) {
262-
if arm.pats.len() == 1 {
263-
let variants = arm.pats[0].necessary_variants();
262+
let pats = arm.top_pats_hack();
263+
if pats.len() == 1 {
264+
let variants = pats[0].necessary_variants();
264265

265266
// Inside the body, ignore constructions of variants
266267
// necessary for the pattern to match. Those construction sites

src/librustc/middle/expr_use_visitor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -779,14 +779,14 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
779779

780780
fn arm_move_mode(&mut self, discr_cmt: mc::cmt<'tcx>, arm: &hir::Arm) -> TrackMatchMode {
781781
let mut mode = Unknown;
782-
for pat in &arm.pats {
782+
for pat in arm.top_pats_hack() {
783783
self.determine_pat_move_mode(discr_cmt.clone(), &pat, &mut mode);
784784
}
785785
mode
786786
}
787787

788788
fn walk_arm(&mut self, discr_cmt: mc::cmt<'tcx>, arm: &hir::Arm, mode: MatchMode) {
789-
for pat in &arm.pats {
789+
for pat in arm.top_pats_hack() {
790790
self.walk_pat(discr_cmt.clone(), &pat, mode);
791791
}
792792

src/librustc/middle/liveness.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ fn visit_local<'tcx>(ir: &mut IrMaps<'tcx>, local: &'tcx hir::Local) {
456456
}
457457

458458
fn visit_arm<'tcx>(ir: &mut IrMaps<'tcx>, arm: &'tcx hir::Arm) {
459-
for pat in &arm.pats {
459+
for pat in arm.top_pats_hack() {
460460
add_from_pat(ir, pat);
461461
}
462462
intravisit::walk_arm(ir, arm);
@@ -1080,7 +1080,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
10801080
// the same bindings, and we also consider the first pattern to be
10811081
// the "authoritative" set of ids
10821082
let arm_succ =
1083-
self.define_bindings_in_arm_pats(arm.pats.first().map(|p| &**p),
1083+
self.define_bindings_in_arm_pats(arm.top_pats_hack().first().map(|p| &**p),
10841084
guard_succ);
10851085
self.merge_from_succ(ln, arm_succ, first_merge);
10861086
first_merge = false;
@@ -1422,7 +1422,7 @@ fn check_arm<'a, 'tcx>(this: &mut Liveness<'a, 'tcx>, arm: &'tcx hir::Arm) {
14221422
// patterns so the suggestions to prefix with underscores will apply to those too.
14231423
let mut vars: BTreeMap<String, (LiveNode, Variable, HirId, Vec<Span>)> = Default::default();
14241424

1425-
for pat in &arm.pats {
1425+
for pat in arm.top_pats_hack() {
14261426
this.arm_pats_bindings(Some(&*pat), |this, ln, var, sp, id| {
14271427
let name = this.ir.variable_name(var);
14281428
vars.entry(name)

src/librustc_ast_borrowck/cfg/construct.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> {
390390
// patterns and the guard (if there is one) in the arm.
391391
let bindings_exit = self.add_dummy_node(&[]);
392392

393-
for pat in &arm.pats {
393+
for pat in arm.top_pats_hack() {
394394
// Visit the pattern, coming from the discriminant exit
395395
let mut pat_exit = self.pat(&pat, discr_exit);
396396

src/librustc_mir/hair/cx/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ impl ToBorrowKind for hir::Mutability {
862862

863863
fn convert_arm<'a, 'tcx>(cx: &mut Cx<'a, 'tcx>, arm: &'tcx hir::Arm) -> Arm<'tcx> {
864864
Arm {
865-
patterns: arm.pats.iter().map(|p| cx.pattern_from_hir(p)).collect(),
865+
patterns: arm.top_pats_hack().iter().map(|p| cx.pattern_from_hir(p)).collect(),
866866
guard: match arm.guard {
867867
Some(hir::Guard::If(ref e)) => Some(Guard::If(e.to_ref())),
868868
_ => None,

src/librustc_mir/hair/pattern/check_match.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
137137
) {
138138
for arm in arms {
139139
// First, check legality of move bindings.
140-
self.check_patterns(arm.guard.is_some(), &arm.pats);
140+
self.check_patterns(arm.guard.is_some(), &arm.top_pats_hack());
141141

142142
// Second, if there is a guard on each arm, make sure it isn't
143143
// assigning or borrowing anything mutably.
@@ -146,7 +146,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
146146
}
147147

148148
// Third, perform some lints.
149-
for pat in &arm.pats {
149+
for pat in arm.top_pats_hack() {
150150
check_for_bindings_named_same_as_variants(self, pat);
151151
}
152152
}
@@ -156,7 +156,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
156156
let mut have_errors = false;
157157

158158
let inlined_arms : Vec<(Vec<_>, _)> = arms.iter().map(|arm| (
159-
arm.pats.iter().map(|pat| {
159+
arm.top_pats_hack().iter().map(|pat| {
160160
let mut patcx = PatternContext::new(self.tcx,
161161
self.param_env.and(self.identity_substs),
162162
self.tables);

src/librustc_passes/rvalue_promotion.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ fn check_expr_kind<'a, 'tcx>(
503503
// Compute the most demanding borrow from all the arms'
504504
// patterns and set that on the discriminator.
505505
let mut mut_borrow = false;
506-
for pat in hirvec_arm.iter().flat_map(|arm| &arm.pats) {
506+
for pat in hirvec_arm.iter().flat_map(|arm| arm.top_pats_hack()) {
507507
mut_borrow = v.remove_mut_rvalue_borrow(pat);
508508
}
509509
if mut_borrow {

src/librustc_typeck/check/_match.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
5858
// collection into `Vec`), so we get types for all bindings.
5959
let all_arm_pats_diverge: Vec<_> = arms.iter().map(|arm| {
6060
let mut all_pats_diverge = Diverges::WarnedAlways;
61-
for p in &arm.pats {
62-
self.diverges.set(Diverges::Maybe);
63-
self.check_pat_top(&p, discrim_ty, Some(discrim.span));
64-
all_pats_diverge &= self.diverges.get();
65-
}
61+
self.diverges.set(Diverges::Maybe);
62+
self.check_pat_top(&arm.pat, discrim_ty, Some(discrim.span));
63+
all_pats_diverge &= self.diverges.get();
6664

6765
// As discussed with @eddyb, this is for disabling unreachable_code
6866
// warnings on patterns (they're now subsumed by unreachable_patterns

0 commit comments

Comments
 (0)