Unnamed repository; edit this file 'description' to name the repository.
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...
bors 2024-09-20
parent 6dad8c5 · parent 5c06f04 · commit b2a9cc4
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mbe/regression.rs24
-rw-r--r--crates/mbe/src/expander/matcher.rs2
2 files changed, 25 insertions, 1 deletions
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_