summaryrefslogtreecommitdiffstats
path: root/src/test/ui/proc-macro/crate-var.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/proc-macro/crate-var.rs')
-rw-r--r--src/test/ui/proc-macro/crate-var.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/test/ui/proc-macro/crate-var.rs b/src/test/ui/proc-macro/crate-var.rs
new file mode 100644
index 000000000..c0518e4b0
--- /dev/null
+++ b/src/test/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() {}