summaryrefslogtreecommitdiffstats
path: root/tests/ui/inline-const/interpolated.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/inline-const/interpolated.rs')
-rw-r--r--tests/ui/inline-const/interpolated.rs32
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 000000000..3fcc621c9
--- /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() {}