Parse inline const patterns
This commit is contained in:
parent
c3e8d7965c
commit
59d07c3ae5
4 changed files with 25 additions and 2 deletions
|
@ -313,6 +313,9 @@ impl<'a> Parser<'a> {
|
||||||
let pat = self.parse_pat_with_range_pat(false, None)?;
|
let pat = self.parse_pat_with_range_pat(false, None)?;
|
||||||
self.sess.gated_spans.gate(sym::box_patterns, lo.to(self.prev_token.span));
|
self.sess.gated_spans.gate(sym::box_patterns, lo.to(self.prev_token.span));
|
||||||
PatKind::Box(pat)
|
PatKind::Box(pat)
|
||||||
|
} else if self.check_inline_const() {
|
||||||
|
// Parse `const pat`
|
||||||
|
PatKind::Lit(self.parse_const_expr(lo.to(self.token.span))?)
|
||||||
} else if self.can_be_ident_pat() {
|
} else if self.can_be_ident_pat() {
|
||||||
// Parse `ident @ pat`
|
// Parse `ident @ pat`
|
||||||
// This can give false positives and parse nullary enums,
|
// This can give false positives and parse nullary enums,
|
||||||
|
|
20
src/test/ui/parser/inline_const/const_match_pat_parses.rs
Normal file
20
src/test/ui/parser/inline_const/const_match_pat_parses.rs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// check-pass
|
||||||
|
// compile-flags: -Z parse-only
|
||||||
|
|
||||||
|
#![feature(inline_const)]
|
||||||
|
const MMIO_BIT1: u8 = 4;
|
||||||
|
const MMIO_BIT2: u8 = 5;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
match read_mmio() {
|
||||||
|
0 => {}
|
||||||
|
const { 1 << MMIO_BIT1 } => println!("FOO"),
|
||||||
|
const { 1 << MMIO_BIT2 } => println!("BAR"),
|
||||||
|
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_mmio() -> u8 {
|
||||||
|
1 << 5
|
||||||
|
}
|
|
@ -13,4 +13,4 @@
|
||||||
|
|
||||||
fn f() { |[](* }
|
fn f() { |[](* }
|
||||||
//~^ ERROR expected one of `,` or `:`, found `(`
|
//~^ ERROR expected one of `,` or `:`, found `(`
|
||||||
//~| ERROR expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `mut`, `ref`, `|`, identifier, or path, found `*`
|
//~| ERROR expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `const`, `mut`, `ref`, `|`, identifier, or path, found `*`
|
||||||
|
|
|
@ -4,7 +4,7 @@ error: expected one of `,` or `:`, found `(`
|
||||||
LL | fn f() { |[](* }
|
LL | fn f() { |[](* }
|
||||||
| ^ expected one of `,` or `:`
|
| ^ expected one of `,` or `:`
|
||||||
|
|
||||||
error: expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `mut`, `ref`, `|`, identifier, or path, found `*`
|
error: expected one of `&`, `(`, `)`, `-`, `...`, `..=`, `..`, `[`, `_`, `box`, `const`, `mut`, `ref`, `|`, identifier, or path, found `*`
|
||||||
--> $DIR/issue-66357-unexpected-unreachable.rs:14:14
|
--> $DIR/issue-66357-unexpected-unreachable.rs:14:14
|
||||||
|
|
|
|
||||||
LL | fn f() { |[](* }
|
LL | fn f() { |[](* }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue