diff options
| author | Michael Goulet <michael@errs.io> | 2023-07-17 19:02:06 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-07-19 16:24:58 +0000 |
| commit | 719797949ab1122d92a608b3f11f3321166b02eb (patch) | |
| tree | e600ead2aa846e23b0b8bf2c2464d44653d1f2bf /tests | |
| parent | 11da267fdb17371d60e6f555d4bcf35bf765d982 (diff) | |
| download | rust-719797949ab1122d92a608b3f11f3321166b02eb.tar.gz rust-719797949ab1122d92a608b3f11f3321166b02eb.zip | |
Fix inline_const with interpolated block
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/inline-const/interpolated.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/ui/inline-const/interpolated.rs b/tests/ui/inline-const/interpolated.rs new file mode 100644 index 00000000000..3fcc621c946 --- /dev/null +++ b/tests/ui/inline-const/interpolated.rs @@ -0,0 +1,32 @@ +// check-pass + +#![feature(inline_const)] + +// This used to be unsupported since the parser first tries to check if we have +// any nested items, and then checks for statements (and expressions). The heuristic +// that we were using to detect the beginning of a const item was incorrect, so +// this used to fail. +macro_rules! m { + ($b:block) => { + fn foo() { + const $b + } + } +} + +// This has worked since inline-consts were implemented, since the position that +// the const block is located at doesn't support nested items (e.g. because +// `let x = const X: u32 = 1;` is invalid), so there's no ambiguity parsing the +// inline const. +macro_rules! m2 { + ($b:block) => { + fn foo2() { + let _ = const $b; + } + } +} + +m!({}); +m2!({}); + +fn main() {} |
