diff options
| author | bors <bors@rust-lang.org> | 2024-09-20 06:29:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-09-20 06:29:50 +0000 |
| commit | c4949b76ea093ad454d1d893178043e33fb76ad5 (patch) | |
| tree | a0994be0c2afc5278144a9d236eeac933fb0fd33 | |
| parent | 814da15d8baf2391f4d19cbc4bf73f81ffbeabdf (diff) | |
| parent | 6ec47a3e24ad7969f6372a928087cbbde05157b5 (diff) | |
| download | rust-c4949b76ea093ad454d1d893178043e33fb76ad5.tar.gz rust-c4949b76ea093ad454d1d893178043e33fb76ad5.zip | |
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...
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs | 24 | ||||
| -rw-r--r-- | src/tools/rust-analyzer/crates/mbe/src/expander/matcher.rs | 2 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs b/src/tools/rust-analyzer/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs index 894ef1d73e2..1bbed01443d 100644 --- a/src/tools/rust-analyzer/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs +++ b/src/tools/rust-analyzer/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/src/tools/rust-analyzer/crates/mbe/src/expander/matcher.rs b/src/tools/rust-analyzer/crates/mbe/src/expander/matcher.rs index 90f56cc31da..4a052bbb9f6 100644 --- a/src/tools/rust-analyzer/crates/mbe/src/expander/matcher.rs +++ b/src/tools/rust-analyzer/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_ |
