1
Fork 0

Avoid ICEing without the pattern_types feature gate

This commit is contained in:
Oli Scherer 2024-04-08 21:02:13 +00:00
parent 07310e21d4
commit 24ee9b9423
3 changed files with 43 additions and 1 deletions

View file

@ -2249,7 +2249,11 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
Ty::new_pat(tcx, ty, pat)
}
hir::PatKind::Err(e) => Ty::new_error(tcx, e),
_ => span_bug!(pat.span, "unsupported pattern for pattern type: {pat:#?}"),
_ => Ty::new_error_with_message(
tcx,
pat.span,
format!("unsupported pattern for pattern type: {pat:#?}"),
),
};
self.record_ty(pat.hir_id, ty, pat.span);
pat_ty

View file

@ -0,0 +1,15 @@
//! This test ensures we do not ICE for unimplemented
//! patterns unless the feature gate is enabled.
#![feature(core_pattern_type)]
#![feature(core_pattern_types)]
use std::pat::pattern_type;
type Always = pattern_type!(Option<u32> is Some(_));
//~^ ERROR: pattern types are unstable
type Binding = pattern_type!(Option<u32> is x);
//~^ ERROR: pattern types are unstable
fn main() {}

View file

@ -0,0 +1,23 @@
error[E0658]: pattern types are unstable
--> $DIR/unimplemented_pat.rs:9:15
|
LL | type Always = pattern_type!(Option<u32> is Some(_));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #123646 <https://github.com/rust-lang/rust/issues/123646> for more information
= help: add `#![feature(pattern_types)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: pattern types are unstable
--> $DIR/unimplemented_pat.rs:12:16
|
LL | type Binding = pattern_type!(Option<u32> is x);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #123646 <https://github.com/rust-lang/rust/issues/123646> for more information
= help: add `#![feature(pattern_types)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.