diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2023-07-19 22:37:08 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-19 22:37:08 +0530 |
| commit | 6c3cbcd333eebb0fd9d2cf905ca6e376c4672107 (patch) | |
| tree | b16634a8c0484f9edfe944965d307d209d442881 /compiler | |
| parent | c7c89140b00327eb22b00f8962bd75c10d58e219 (diff) | |
| parent | 719797949ab1122d92a608b3f11f3321166b02eb (diff) | |
| download | rust-6c3cbcd333eebb0fd9d2cf905ca6e376c4672107.tar.gz rust-6c3cbcd333eebb0fd9d2cf905ca6e376c4672107.zip | |
Rollup merge of #113803 - compiler-errors:const-interp-block, r=fee1-dead
Fix inline_const with interpolated block
Interpolation already worked when we had a `const $block` that wasn't a statement expr:
```
fn foo() {
let _ = const $block;
}
```
But it was failing when the const block was in statement expr position:
```
fn foo() {
const $block;
}
```
... because of a bug in a check for const items. This fixes that.
---
cc https://github.com/rust-lang/rust/pull/112953#issuecomment-1631354481, though I don't think this requires an FCP since it's already supported in exprs and seems to me to be fully a parser bug.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_parse/src/parser/mod.rs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs index e4d843b7c8b..2e1a61e634e 100644 --- a/compiler/rustc_parse/src/parser/mod.rs +++ b/compiler/rustc_parse/src/parser/mod.rs @@ -1210,7 +1210,8 @@ impl<'a> Parser<'a> { fn parse_constness_(&mut self, case: Case, is_closure: bool) -> Const { // Avoid const blocks and const closures to be parsed as const items if (self.check_const_closure() == is_closure) - && self.look_ahead(1, |t| t != &token::OpenDelim(Delimiter::Brace)) + && !self + .look_ahead(1, |t| *t == token::OpenDelim(Delimiter::Brace) || t.is_whole_block()) && self.eat_keyword_case(kw::Const, case) { Const::Yes(self.prev_token.uninterpolated_span()) |
