about summary refs log tree commit diff
path: root/tests/ui/proc-macro/crate-var.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/proc-macro/crate-var.rs')
-rw-r--r--tests/ui/proc-macro/crate-var.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/crate-var.rs b/tests/ui/proc-macro/crate-var.rs
new file mode 100644
index 00000000000..c0518e4b08c
--- /dev/null
+++ b/tests/ui/proc-macro/crate-var.rs
@@ -0,0 +1,61 @@
+// run-pass
+// aux-build:double.rs
+// aux-build:external-crate-var.rs
+
+#![allow(unused)]
+
+#[macro_use]
+extern crate double;
+#[macro_use]
+extern crate external_crate_var;
+
+struct Foo;
+
+trait Trait {
+    const CONST: u32;
+    type Assoc;
+}
+
+impl Trait for Foo {
+    const CONST: u32 = 0;
+    type Assoc = Foo;
+}
+
+macro_rules! local { () => {
+    // derive_Double outputs secondary copies of each definition
+    // to test what the proc_macro sees.
+    mod bar {
+        #[derive(Double)]
+        struct Bar($crate::Foo);
+    }
+
+    mod qself {
+        #[derive(Double)]
+        struct QSelf(<::Foo as $crate::Trait>::Assoc);
+    }
+
+    mod qself_recurse {
+        #[derive(Double)]
+        struct QSelfRecurse(<<$crate::Foo as $crate::Trait>::Assoc as $crate::Trait>::Assoc);
+    }
+
+    mod qself_in_const {
+        #[derive(Double)]
+        #[repr(u32)]
+        enum QSelfInConst {
+            Variant = <::Foo as $crate::Trait>::CONST,
+        }
+    }
+} }
+
+mod local {
+    local!();
+}
+
+// and now repeat the above tests, using a macro defined in another crate
+
+mod external {
+    external!{}
+}
+
+fn main() {}