diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2024-02-28 22:37:11 +0100 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2024-03-12 21:38:30 +0100 |
| commit | 9f2aa5b85a2584568f1ad34f23d029eeafb20d4b (patch) | |
| tree | c8a43d2517eb0ffb2d70c25293588473fcd17e4f /compiler/rustc_pattern_analysis/src/constructor.rs | |
| parent | 1ec73d70fac58055eb1a2249279fad81b986edc2 (diff) | |
| download | rust-9f2aa5b85a2584568f1ad34f23d029eeafb20d4b.tar.gz rust-9f2aa5b85a2584568f1ad34f23d029eeafb20d4b.zip | |
Suggest never pattern instead of `_` for empty types
Diffstat (limited to 'compiler/rustc_pattern_analysis/src/constructor.rs')
| -rw-r--r-- | compiler/rustc_pattern_analysis/src/constructor.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/compiler/rustc_pattern_analysis/src/constructor.rs b/compiler/rustc_pattern_analysis/src/constructor.rs index 66c9e2e1840..b4d32782acf 100644 --- a/compiler/rustc_pattern_analysis/src/constructor.rs +++ b/compiler/rustc_pattern_analysis/src/constructor.rs @@ -1048,10 +1048,32 @@ impl<Cx: TypeCx> ConstructorSet<Cx> { // In a `MaybeInvalid` place even an empty pattern may be reachable. We therefore // add a dummy empty constructor here, which will be ignored if the place is // `ValidOnly`. - missing_empty.push(NonExhaustive); + missing_empty.push(Never); } } SplitConstructorSet { present, missing, missing_empty } } + + /// Whether this set only contains empty constructors. + pub(crate) fn all_empty(&self) -> bool { + match self { + ConstructorSet::Bool + | ConstructorSet::Integers { .. } + | ConstructorSet::Ref + | ConstructorSet::Union + | ConstructorSet::Unlistable => false, + ConstructorSet::NoConstructors => true, + ConstructorSet::Struct { empty } => *empty, + ConstructorSet::Variants { variants, non_exhaustive } => { + !*non_exhaustive + && variants + .iter() + .all(|visibility| matches!(visibility, VariantVisibility::Empty)) + } + ConstructorSet::Slice { array_len, subtype_is_empty } => { + *subtype_is_empty && matches!(array_len, Some(1..)) + } + } + } } |
