about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.rs9
-rw-r--r--tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.stderr13
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/allowed-operations.rs58
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/hygiene.rs13
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/hygiene.stderr14
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.rs81
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.stderr95
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/syntax-errors.rs50
-rw-r--r--tests/ui/macros/macro-metavar-expr-concat/syntax-errors.stderr68
-rw-r--r--tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr4
10 files changed, 403 insertions, 2 deletions
diff --git a/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.rs b/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.rs
new file mode 100644
index 00000000000..e700999ae4b
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.rs
@@ -0,0 +1,9 @@
+macro_rules! join {
+    ($lhs:ident, $rhs:ident) => {
+        let ${concat($lhs, $rhs)}: () = ();
+        //~^ ERROR the `concat` meta-variable expression is unstable
+    };
+}
+
+fn main() {
+}
diff --git a/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.stderr b/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.stderr
new file mode 100644
index 00000000000..5b2589d8c89
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.stderr
@@ -0,0 +1,13 @@
+error[E0658]: the `concat` meta-variable expression is unstable
+  --> $DIR/feature-gate-macro-metavar-expr-concat.rs:3:14
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |              ^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #124225 <https://github.com/rust-lang/rust/issues/124225> for more information
+   = help: add `#![feature(macro_metavar_expr_concat)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/macros/macro-metavar-expr-concat/allowed-operations.rs b/tests/ui/macros/macro-metavar-expr-concat/allowed-operations.rs
new file mode 100644
index 00000000000..e44eeffb01b
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/allowed-operations.rs
@@ -0,0 +1,58 @@
+//@ run-pass
+
+#![allow(dead_code, non_camel_case_types, non_upper_case_globals)]
+#![feature(macro_metavar_expr_concat)]
+
+macro_rules! create_things {
+    ($lhs:ident) => {
+        struct ${concat($lhs, _separated_idents_in_a_struct)} {
+            foo: i32,
+            ${concat($lhs, _separated_idents_in_a_field)}: i32,
+        }
+
+        mod ${concat($lhs, _separated_idents_in_a_module)} {
+            pub const FOO: () = ();
+        }
+
+        fn ${concat($lhs, _separated_idents_in_a_fn)}() {}
+    };
+}
+
+macro_rules! many_idents {
+    ($a:ident, $c:ident) => {
+        const ${concat($a, B, $c, D)}: i32 = 1;
+    };
+}
+
+macro_rules! valid_tts {
+    ($_0:tt, $_1:tt) => {
+        const ${concat($_0, $_1)}: i32 = 1;
+    }
+}
+
+macro_rules! without_dollar_sign_is_an_ident {
+    ($ident:ident) => {
+        const ${concat(VAR, ident)}: i32 = 1;
+        const ${concat(VAR, $ident)}: i32 = 2;
+    };
+}
+
+fn main() {
+    create_things!(behold);
+    behold_separated_idents_in_a_fn();
+    let _ = behold_separated_idents_in_a_module::FOO;
+    let _ = behold_separated_idents_in_a_struct {
+        foo: 1,
+        behold_separated_idents_in_a_field: 2,
+    };
+
+    many_idents!(A, C);
+    assert_eq!(ABCD, 1);
+
+    valid_tts!(X, YZ);
+    assert_eq!(XYZ, 1);
+
+    without_dollar_sign_is_an_ident!(_123);
+    assert_eq!(VARident, 1);
+    assert_eq!(VAR_123, 2);
+}
diff --git a/tests/ui/macros/macro-metavar-expr-concat/hygiene.rs b/tests/ui/macros/macro-metavar-expr-concat/hygiene.rs
new file mode 100644
index 00000000000..24b0e36498a
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/hygiene.rs
@@ -0,0 +1,13 @@
+#![feature(macro_metavar_expr_concat)]
+
+macro_rules! join {
+    ($lhs:ident, $rhs:ident) => {
+        ${concat($lhs, $rhs)}
+        //~^ ERROR cannot find value `abcdef` in this scope
+    };
+}
+
+fn main() {
+    let abcdef = 1;
+    let _another = join!(abc, def);
+}
diff --git a/tests/ui/macros/macro-metavar-expr-concat/hygiene.stderr b/tests/ui/macros/macro-metavar-expr-concat/hygiene.stderr
new file mode 100644
index 00000000000..ef2326dce85
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/hygiene.stderr
@@ -0,0 +1,14 @@
+error[E0425]: cannot find value `abcdef` in this scope
+  --> $DIR/hygiene.rs:5:10
+   |
+LL |         ${concat($lhs, $rhs)}
+   |          ^^^^^^^^^^^^^^^^^^^^ not found in this scope
+...
+LL |     let _another = join!(abc, def);
+   |                    --------------- in this macro invocation
+   |
+   = note: this error originates in the macro `join` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.rs b/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.rs
new file mode 100644
index 00000000000..f72b9baca89
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.rs
@@ -0,0 +1,81 @@
+#![feature(macro_metavar_expr_concat)]
+
+macro_rules! idents_01 {
+    ($rhs:ident) => {
+        let ${concat(abc, $rhs)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! idents_10 {
+    ($lhs:ident) => {
+        let ${concat($lhs, abc)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! idents_11 {
+    ($lhs:ident, $rhs:ident) => {
+        let ${concat($lhs, $rhs)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+        //~| ERROR `${concat(..)}` currently does not support raw identifiers
+        //~| ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! no_params {
+    () => {
+        let ${concat(r#abc, abc)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+        //~| ERROR expected pattern, found `$`
+
+        let ${concat(abc, r#abc)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+
+        let ${concat(r#abc, r#abc)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! tts_01 {
+    ($rhs:tt) => {
+        let ${concat(abc, $rhs)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! tts_10 {
+    ($lhs:tt) => {
+        let ${concat($lhs, abc)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+macro_rules! tts_11 {
+    ($lhs:tt, $rhs:tt) => {
+        let ${concat($lhs, $rhs)}: () = ();
+        //~^ ERROR `${concat(..)}` currently does not support raw identifiers
+        //~| ERROR `${concat(..)}` currently does not support raw identifiers
+        //~| ERROR `${concat(..)}` currently does not support raw identifiers
+    };
+}
+
+fn main() {
+    idents_01!(r#_c);
+
+    idents_10!(r#_c);
+
+    idents_11!(r#_c, d);
+    idents_11!(_e, r#f);
+    idents_11!(r#_g, r#h);
+
+    tts_01!(r#_c);
+
+    tts_10!(r#_c);
+
+    tts_11!(r#_c, d);
+    tts_11!(_e, r#f);
+    tts_11!(r#_g, r#h);
+
+    no_params!();
+}
diff --git a/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.stderr b/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.stderr
new file mode 100644
index 00000000000..dd525cf0801
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/raw-identifiers.stderr
@@ -0,0 +1,95 @@
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:28:22
+   |
+LL |         let ${concat(r#abc, abc)}: () = ();
+   |                      ^^^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:32:27
+   |
+LL |         let ${concat(abc, r#abc)}: () = ();
+   |                           ^^^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:35:22
+   |
+LL |         let ${concat(r#abc, r#abc)}: () = ();
+   |                      ^^^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:5:28
+   |
+LL |         let ${concat(abc, $rhs)}: () = ();
+   |                            ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:12:23
+   |
+LL |         let ${concat($lhs, abc)}: () = ();
+   |                       ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:19:23
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                       ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:19:29
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                             ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:19:23
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                       ^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:42:28
+   |
+LL |         let ${concat(abc, $rhs)}: () = ();
+   |                            ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:49:23
+   |
+LL |         let ${concat($lhs, abc)}: () = ();
+   |                       ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:56:23
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                       ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:56:29
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                             ^^^
+
+error: `${concat(..)}` currently does not support raw identifiers
+  --> $DIR/raw-identifiers.rs:56:23
+   |
+LL |         let ${concat($lhs, $rhs)}: () = ();
+   |                       ^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: expected pattern, found `$`
+  --> $DIR/raw-identifiers.rs:28:13
+   |
+LL |         let ${concat(r#abc, abc)}: () = ();
+   |             ^ expected pattern
+...
+LL |     no_params!();
+   |     ------------ in this macro invocation
+   |
+   = note: this error originates in the macro `no_params` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 14 previous errors
+
diff --git a/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.rs b/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.rs
new file mode 100644
index 00000000000..bf47442ea76
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.rs
@@ -0,0 +1,50 @@
+#![feature(macro_metavar_expr_concat)]
+
+macro_rules! wrong_concat_declarations {
+    ($ex:expr) => {
+        ${concat()}
+        //~^ ERROR expected identifier
+
+        ${concat(aaaa)}
+        //~^ ERROR `concat` must have at least two elements
+
+        ${concat(aaaa,)}
+        //~^ ERROR expected identifier
+
+        ${concat(aaaa, 1)}
+        //~^ ERROR expected identifier
+
+        ${concat(_, aaaa)}
+
+        ${concat(aaaa aaaa)}
+        //~^ ERROR expected comma
+
+        ${concat($ex)}
+        //~^ ERROR `concat` must have at least two elements
+
+        ${concat($ex, aaaa)}
+        //~^ ERROR `${concat(..)}` currently only accepts identifiers
+
+        ${concat($ex, aaaa 123)}
+        //~^ ERROR expected comma
+
+        ${concat($ex, aaaa,)}
+        //~^ ERROR expected identifier
+
+        ${concat($ex, aaaa, 123)}
+        //~^ ERROR expected identifier
+    };
+}
+
+macro_rules! dollar_sign_without_referenced_ident {
+    ($ident:ident) => {
+        const ${concat(FOO, $foo)}: i32 = 2;
+        //~^ ERROR variable `foo` is not recognized in meta-variable expression
+    };
+}
+
+fn main() {
+    wrong_concat_declarations!(1);
+
+    dollar_sign_without_referenced_ident!(VAR);
+}
diff --git a/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.stderr b/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.stderr
new file mode 100644
index 00000000000..b216a86d59a
--- /dev/null
+++ b/tests/ui/macros/macro-metavar-expr-concat/syntax-errors.stderr
@@ -0,0 +1,68 @@
+error: expected identifier
+  --> $DIR/syntax-errors.rs:5:10
+   |
+LL |         ${concat()}
+   |          ^^^^^^^^^^
+
+error: `concat` must have at least two elements
+  --> $DIR/syntax-errors.rs:8:11
+   |
+LL |         ${concat(aaaa)}
+   |           ^^^^^^
+
+error: expected identifier
+  --> $DIR/syntax-errors.rs:11:10
+   |
+LL |         ${concat(aaaa,)}
+   |          ^^^^^^^^^^^^^^^
+
+error: expected identifier, found `1`
+  --> $DIR/syntax-errors.rs:14:24
+   |
+LL |         ${concat(aaaa, 1)}
+   |                        ^ help: try removing `1`
+
+error: expected comma
+  --> $DIR/syntax-errors.rs:19:10
+   |
+LL |         ${concat(aaaa aaaa)}
+   |          ^^^^^^^^^^^^^^^^^^^
+
+error: `concat` must have at least two elements
+  --> $DIR/syntax-errors.rs:22:11
+   |
+LL |         ${concat($ex)}
+   |           ^^^^^^
+
+error: expected comma
+  --> $DIR/syntax-errors.rs:28:10
+   |
+LL |         ${concat($ex, aaaa 123)}
+   |          ^^^^^^^^^^^^^^^^^^^^^^^
+
+error: expected identifier
+  --> $DIR/syntax-errors.rs:31:10
+   |
+LL |         ${concat($ex, aaaa,)}
+   |          ^^^^^^^^^^^^^^^^^^^^
+
+error: expected identifier, found `123`
+  --> $DIR/syntax-errors.rs:34:29
+   |
+LL |         ${concat($ex, aaaa, 123)}
+   |                             ^^^ help: try removing `123`
+
+error: `${concat(..)}` currently only accepts identifiers or meta-variables as parameters
+  --> $DIR/syntax-errors.rs:25:19
+   |
+LL |         ${concat($ex, aaaa)}
+   |                   ^^
+
+error: variable `foo` is not recognized in meta-variable expression
+  --> $DIR/syntax-errors.rs:41:30
+   |
+LL |         const ${concat(FOO, $foo)}: i32 = 2;
+   |                              ^^^
+
+error: aborting due to 11 previous errors
+
diff --git a/tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr b/tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr
index 3fa3839bae2..8e4ba192d79 100644
--- a/tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr
+++ b/tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr
@@ -191,10 +191,10 @@ LL |     ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
    |                                 ^^^^^^^^^^^^^^ help: supported expressions are count, ignore, index and len
 
 error: expected identifier
-  --> $DIR/syntax-errors.rs:118:31
+  --> $DIR/syntax-errors.rs:118:33
    |
 LL |     ( $( $i:ident ),* ) => { ${ {} } };
-   |                               ^^^^^^
+   |                                 ^^
 
 error: `count` can not be placed inside the inner-most repetition
   --> $DIR/syntax-errors.rs:12:24