Auto merge of #18153 - ChayimFriedman2:mbe-const, r=Veykril

fix: When checking for forbidden expr kind matches, account for rawness

An expression starting with `r#const` etc. should be accepted even in edition <=2021.

Fixes #18148.

This was not fixed when testing with edition 2024, I wonder whether that means our check for edition is incorrect...
This commit is contained in:
bors 2024-09-20 06:29:50 +00:00
commit b2a9cc4eff
2 changed files with 25 additions and 1 deletions

View file

@ -1144,3 +1144,27 @@ mod any {
"#]],
);
}
#[test]
fn regression_18148() {
check(
r#"
macro_rules! m {
( $e:expr ) => {};
}
fn foo() {
m!(r#const);
}
"#,
expect![[r#"
macro_rules! m {
( $e:expr ) => {};
}
fn foo() {
;
}
"#]],
);
}

View file

@ -780,7 +780,7 @@ fn match_meta_var(
// [1]: https://github.com/rust-lang/rust/blob/f0c4da499/compiler/rustc_expand/src/mbe/macro_parser.rs#L576
match input.peek_n(0) {
Some(tt::TokenTree::Leaf(tt::Leaf::Ident(it))) => {
let is_err = if matches!(expr, ExprKind::Expr2021) {
let is_err = if it.is_raw.no() && matches!(expr, ExprKind::Expr2021) {
it.sym == sym::underscore || it.sym == sym::let_ || it.sym == sym::const_
} else {
it.sym == sym::let_