Rollup merge of #123648 - oli-obk:pattern_types_syntax, r=compiler-errors

Avoid ICEing without the pattern_types feature gate

fixes  #123643
This commit is contained in:
Matthias Krüger 2024-04-09 06:02:23 +02:00 committed by GitHub
commit 727c31a797
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 44 additions and 2 deletions

View File

@ -216,7 +216,7 @@ pub fn internal(&self, feature: Symbol) -> bool {
/// Set the maximum pattern complexity allowed (not limited by default).
(internal, pattern_complexity, "1.78.0", None),
/// Allows using pattern types.
(internal, pattern_types, "CURRENT_RUSTC_VERSION", Some(54882)),
(internal, pattern_types, "CURRENT_RUSTC_VERSION", Some(123646)),
/// Allows using `#[prelude_import]` on glob `use` items.
(internal, prelude_import, "1.2.0", None),
/// Used to identify crates that contain the profiler runtime.

View File

@ -2249,7 +2249,11 @@ fn lower_ty_common(&self, hir_ty: &hir::Ty<'tcx>, borrowed: bool, in_path: bool)
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`.