From 7aaf0de700d1bc242d270dcc7e2fee9e3533ea0a Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Thu, 4 Jul 2019 01:28:24 +0300 Subject: [PATCH] Add a test for `$crate` inside macro invocation --- .../ui/proc-macro/dollar-crate-issue-62325.rs | 24 ++++++++ .../dollar-crate-issue-62325.stderr | 4 ++ .../dollar-crate-issue-62325.stdout | 61 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/test/ui/proc-macro/dollar-crate-issue-62325.rs create mode 100644 src/test/ui/proc-macro/dollar-crate-issue-62325.stderr create mode 100644 src/test/ui/proc-macro/dollar-crate-issue-62325.stdout diff --git a/src/test/ui/proc-macro/dollar-crate-issue-62325.rs b/src/test/ui/proc-macro/dollar-crate-issue-62325.rs new file mode 100644 index 000000000000..8e21ca87f923 --- /dev/null +++ b/src/test/ui/proc-macro/dollar-crate-issue-62325.rs @@ -0,0 +1,24 @@ +//~ ERROR expected type, found `$` + +// edition:2018 +// aux-build:test-macros.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)" + +#![feature(proc_macro_hygiene)] + +#[macro_use] +extern crate test_macros; + +type S = u8; + +macro_rules! m { () => { + #[print_attr] + struct A(identity!($crate::S)); +}} + +m!(); + +fn main() {} diff --git a/src/test/ui/proc-macro/dollar-crate-issue-62325.stderr b/src/test/ui/proc-macro/dollar-crate-issue-62325.stderr new file mode 100644 index 000000000000..ecc0d3853e52 --- /dev/null +++ b/src/test/ui/proc-macro/dollar-crate-issue-62325.stderr @@ -0,0 +1,4 @@ +error: expected type, found `$` + +error: aborting due to previous error + diff --git a/src/test/ui/proc-macro/dollar-crate-issue-62325.stdout b/src/test/ui/proc-macro/dollar-crate-issue-62325.stdout new file mode 100644 index 000000000000..e181a4ed54b6 --- /dev/null +++ b/src/test/ui/proc-macro/dollar-crate-issue-62325.stdout @@ -0,0 +1,61 @@ +PRINT-ATTR INPUT (DISPLAY): struct A(identity!($crate :: S)); +PRINT-ATTR RE-COLLECTED (DISPLAY): struct A ( identity ! ( $ crate :: S ) ) ; +PRINT-ATTR INPUT (DEBUG): TokenStream [ + Ident { + ident: "struct", + span: #0 bytes(0..0), + }, + Ident { + ident: "A", + span: #0 bytes(0..0), + }, + Group { + delimiter: Parenthesis, + stream: TokenStream [ + Ident { + ident: "identity", + span: #0 bytes(0..0), + }, + Punct { + ch: '!', + spacing: Alone, + 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), + }, + ], + span: #0 bytes(0..0), + }, + Punct { + ch: ';', + spacing: Alone, + span: #0 bytes(0..0), + }, +]