summary refs log tree commit diff
path: root/compiler/rustc_pattern_analysis/src/usefulness.rs
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2024-02-06 02:44:48 +0100
committerNadrieril <nadrieril+git@gmail.com>2024-02-28 17:47:19 +0100
commitab06037269da9c5fc83083fb7d9d9638294e3d63 (patch)
tree3ad6f38428020dc6c8fcdaf58d0d4b009652a7f1 /compiler/rustc_pattern_analysis/src/usefulness.rs
parentbe01e28dceb5e8e32bb1c97f3be5c5488eed8f4f (diff)
downloadrust-ab06037269da9c5fc83083fb7d9d9638294e3d63.tar.gz
rust-ab06037269da9c5fc83083fb7d9d9638294e3d63.zip
Push the decision to skip fields further down
Diffstat (limited to 'compiler/rustc_pattern_analysis/src/usefulness.rs')
-rw-r--r--compiler/rustc_pattern_analysis/src/usefulness.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_pattern_analysis/src/usefulness.rs b/compiler/rustc_pattern_analysis/src/usefulness.rs
index f672051be5a..ec9f3bb0db9 100644
--- a/compiler/rustc_pattern_analysis/src/usefulness.rs
+++ b/compiler/rustc_pattern_analysis/src/usefulness.rs
@@ -716,7 +716,7 @@ use std::fmt;
 
 use crate::constructor::{Constructor, ConstructorSet, IntRange};
 use crate::pat::{DeconstructedPat, PatId, PatOrWild, WitnessPat};
-use crate::{Captures, MatchArm, TypeCx};
+use crate::{Captures, MatchArm, SkipField, TypeCx};
 
 use self::ValidityConstraint::*;
 
@@ -833,7 +833,9 @@ impl<Cx: TypeCx> PlaceInfo<Cx> {
     ) -> impl Iterator<Item = Self> + ExactSizeIterator + Captures<'a> {
         let ctor_sub_tys = cx.ctor_sub_tys(ctor, &self.ty);
         let ctor_sub_validity = self.validity.specialize(ctor);
-        ctor_sub_tys.map(move |ty| PlaceInfo {
+        // Collect to keep the `ExactSizeIterator` bound. This is a temporary measure.
+        let tmp: Vec<_> = ctor_sub_tys.filter(|(_, SkipField(skip))| !skip).collect();
+        tmp.into_iter().map(move |(ty, _)| PlaceInfo {
             ty,
             validity: ctor_sub_validity,
             is_scrutinee: false,