]> git.lizzy.rs Git - rust.git/commitdiff
Add test demonstrating disintegration of `$crate` into `$` and `crate`
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Thu, 27 Dec 2018 18:13:49 +0000 (21:13 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Thu, 27 Dec 2018 21:34:24 +0000 (00:34 +0300)
src/test/ui/proc-macro/auxiliary/dollar-crate.rs
src/test/ui/proc-macro/dollar-crate-issue-57089.rs [new file with mode: 0644]
src/test/ui/proc-macro/dollar-crate-issue-57089.stderr [new file with mode: 0644]
src/test/ui/proc-macro/dollar-crate-issue-57089.stdout [new file with mode: 0644]

index d0ea850d4e3231a07e048d0c3e4b36b087907062..c5347d2e81a6b3401df6cc795cd91978f27755b2 100644 (file)
@@ -6,6 +6,13 @@
 extern crate proc_macro;
 use proc_macro::TokenStream;
 
+#[proc_macro]
+pub fn m_empty(input: TokenStream) -> TokenStream {
+    println!("PROC MACRO INPUT (PRETTY-PRINTED): {}", input);
+    println!("PROC MACRO INPUT: {:#?}", input);
+    TokenStream::new()
+}
+
 #[proc_macro]
 pub fn m(input: TokenStream) -> TokenStream {
     println!("PROC MACRO INPUT (PRETTY-PRINTED): {}", input);
diff --git a/src/test/ui/proc-macro/dollar-crate-issue-57089.rs b/src/test/ui/proc-macro/dollar-crate-issue-57089.rs
new file mode 100644 (file)
index 0000000..c38b278
--- /dev/null
@@ -0,0 +1,25 @@
+// edition:2018
+// aux-build:dollar-crate.rs
+
+// Anonymize unstable non-dummy spans while still showing dummy spans `0..0`.
+// normalize-stdout-test "bytes\([^0]\w*\.\.(\w+)\)" -> "bytes(LO..$1)"
+// normalize-stdout-test "bytes\((\w+)\.\.[^0]\w*\)" -> "bytes($1..HI)"
+
+extern crate dollar_crate;
+
+type S = u8;
+
+macro_rules! m {
+    () => {
+        dollar_crate::m_empty! {
+            struct M($crate::S);
+        }
+
+        #[dollar_crate::a] //~ ERROR expected type, found `$`
+        struct A($crate::S);
+    };
+}
+
+m!();
+
+fn main() {}
diff --git a/src/test/ui/proc-macro/dollar-crate-issue-57089.stderr b/src/test/ui/proc-macro/dollar-crate-issue-57089.stderr
new file mode 100644 (file)
index 0000000..f82cf22
--- /dev/null
@@ -0,0 +1,11 @@
+error: expected type, found `$`
+  --> $DIR/dollar-crate-in-tokens.rs:18:9
+   |
+LL |         #[dollar_crate::a] //~ ERROR expected type, found `$`
+   |         ^^^^^^^^^^^^^^^^^^
+...
+LL | m!();
+   | ----- in this macro invocation
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/proc-macro/dollar-crate-issue-57089.stdout b/src/test/ui/proc-macro/dollar-crate-issue-57089.stdout
new file mode 100644 (file)
index 0000000..f599a7f
--- /dev/null
@@ -0,0 +1,85 @@
+PROC MACRO INPUT (PRETTY-PRINTED): struct M ( $crate :: S ) ;
+PROC MACRO INPUT: TokenStream [
+    Ident {
+        ident: "struct",
+        span: #2 bytes(LO..HI)
+    },
+    Ident {
+        ident: "M",
+        span: #2 bytes(LO..HI)
+    },
+    Group {
+        delimiter: Parenthesis,
+        stream: TokenStream [
+            Ident {
+                ident: "$crate",
+                span: #2 bytes(LO..HI)
+            },
+            Punct {
+                ch: ':',
+                spacing: Joint,
+                span: #2 bytes(LO..HI)
+            },
+            Punct {
+                ch: ':',
+                spacing: Alone,
+                span: #2 bytes(LO..HI)
+            },
+            Ident {
+                ident: "S",
+                span: #2 bytes(LO..HI)
+            }
+        ],
+        span: #2 bytes(LO..HI)
+    },
+    Punct {
+        ch: ';',
+        spacing: Alone,
+        span: #2 bytes(LO..HI)
+    }
+]
+ATTRIBUTE INPUT (PRETTY-PRINTED): struct A($crate::S);
+ATTRIBUTE INPUT: TokenStream [
+    Ident {
+        ident: "struct",
+        span: #0 bytes(0..0)
+    },
+    Ident {
+        ident: "A",
+        span: #0 bytes(0..0)
+    },
+    Group {
+        delimiter: Parenthesis,
+        stream: TokenStream [
+            Punct {
+                ch: '$',
+                spacing: Alone,
+                span: #0 bytes(0..0)
+            },
+            Ident {
+                ident: "crate",
+                span: #0 bytes(0..0)
+            },
+            Punct {
+                ch: ':',
+                spacing: Joint,
+                span: #0 bytes(0..0)
+            },
+            Punct {
+                ch: ':',
+                spacing: Alone,
+                span: #0 bytes(0..0)
+            },
+            Ident {
+                ident: "S",
+                span: #0 bytes(0..0)
+            }
+        ],
+        span: #0 bytes(0..0)
+    },
+    Punct {
+        ch: ';',
+        spacing: Alone,
+        span: #0 bytes(0..0)
+    }
+]