Skip to content

Commit

Permalink
Rollup merge of rust-lang#134103 - compiler-errors:never-pat-range, r…
Browse files Browse the repository at this point in the history
…=oli-obk

Don't ICE when encountering never in range pattern

Fixes rust-lang#133947

r? oli-obk
  • Loading branch information
fmease authored Dec 10, 2024
2 parents f621be4 + 6e2e9f6 commit c5a8386
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
6 changes: 5 additions & 1 deletion compiler/rustc_hir_typeck/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
})
| hir::Node::ImplItem(hir::ImplItem { kind: hir::ImplItemKind::Const(..), .. }) => true,

hir::Node::Pat(_) => {
self.dcx().span_delayed_bug(expr.span, "place expr not allowed in pattern");
true
}

// These nodes do not have direct sub-exprs.
hir::Node::Param(_)
| hir::Node::Item(_)
Expand All @@ -415,7 +420,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
| hir::Node::Ty(_)
| hir::Node::AssocItemConstraint(_)
| hir::Node::TraitRef(_)
| hir::Node::Pat(_)
| hir::Node::PatField(_)
| hir::Node::LetStmt(_)
| hir::Node::Synthetic
Expand Down
16 changes: 16 additions & 0 deletions tests/ui/never_type/never-in-range-pat.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Regression test for <https://github.com/rust-lang/rust/issues/133947>.

// Make sure we don't ICE when there's `!` in a range pattern.
//
// This shouldn't be allowed anyways, but we only deny it during MIR
// building, so make sure we handle it semi-gracefully during typeck.

#![feature(never_type)]

fn main() {
let x: !;
match 1 {
0..x => {}
//~^ ERROR only `char` and numeric types are allowed in range patterns
}
}
11 changes: 11 additions & 0 deletions tests/ui/never_type/never-in-range-pat.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0029]: only `char` and numeric types are allowed in range patterns
--> $DIR/never-in-range-pat.rs:13:12
|
LL | 0..x => {}
| - ^ this is of type `!` but it should be `char` or numeric
| |
| this is of type `{integer}`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0029`.

0 comments on commit c5a8386

Please sign in to comment.