From 5c06f047b904846c1ab23fcf2c82055525f01db2 Mon Sep 17 00:00:00 2001 From: Chayim Refael Friedman Date: Thu, 19 Sep 2024 23:38:48 +0300 Subject: [PATCH] When checking for forbidden expr kind matches, account for rawness An expression starting with `r#const` etc. should be accepted even in edition <=2021. --- .../macro_expansion_tests/mbe/regression.rs | 24 +++++++++++++++++++ crates/mbe/src/expander/matcher.rs | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs b/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs index 894ef1d73e..1bbed01443 100644 --- a/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs +++ b/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs @@ -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() { + ; +} +"#]], + ); +} diff --git a/crates/mbe/src/expander/matcher.rs b/crates/mbe/src/expander/matcher.rs index 90f56cc31d..4a052bbb9f 100644 --- a/crates/mbe/src/expander/matcher.rs +++ b/crates/mbe/src/expander/matcher.rs @@ -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_