File tree Expand file tree Collapse file tree 1 file changed +23
-6
lines changed Expand file tree Collapse file tree 1 file changed +23
-6
lines changed Original file line number Diff line number Diff line change @@ -573,14 +573,20 @@ pub(crate) fn is_useful(
573
573
matrix : & Matrix ,
574
574
v : & PatStack ,
575
575
) -> MatchCheckResult < Usefulness > {
576
- // Handle the special case of enums with no variants. In that case, no match
577
- // arm is useful.
578
- if let Ty :: Apply ( ApplicationTy { ctor : TypeCtor :: Adt ( AdtId :: EnumId ( enum_id) ) , .. } ) =
579
- cx. infer [ cx. match_expr ] . strip_references ( )
580
- {
581
- if cx. db . enum_data ( * enum_id) . variants . is_empty ( ) {
576
+ // Handle two special cases:
577
+ // - enum with no variants
578
+ // - `!` type
579
+ // In those cases, no match arm is useful.
580
+ match cx. infer [ cx. match_expr ] . strip_references ( ) {
581
+ Ty :: Apply ( ApplicationTy { ctor : TypeCtor :: Adt ( AdtId :: EnumId ( enum_id) ) , .. } ) => {
582
+ if cx. db . enum_data ( * enum_id) . variants . is_empty ( ) {
583
+ return Ok ( Usefulness :: NotUseful ) ;
584
+ }
585
+ }
586
+ Ty :: Apply ( ApplicationTy { ctor : TypeCtor :: Never , .. } ) => {
582
587
return Ok ( Usefulness :: NotUseful ) ;
583
588
}
589
+ _ => ( ) ,
584
590
}
585
591
586
592
if v. is_empty ( ) {
@@ -1917,6 +1923,17 @@ mod tests {
1917
1923
check_no_diagnostic ( content) ;
1918
1924
}
1919
1925
1926
+ #[ test]
1927
+ fn type_never ( ) {
1928
+ let content = r"
1929
+ fn test_fn(never: !) {
1930
+ match never {}
1931
+ }
1932
+ " ;
1933
+
1934
+ check_no_diagnostic ( content) ;
1935
+ }
1936
+
1920
1937
#[ test]
1921
1938
fn enum_never_ref ( ) {
1922
1939
let content = r"
You can’t perform that action at this time.
0 commit comments