about summary refs log tree commit diff
path: root/src/test/ui/hygiene
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2021-01-06 23:50:02 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2021-01-11 23:49:47 +0300
commitb7071b2353199cd438f15dd3068a9d64d3fab93c (patch)
tree7765a81bd8f924190090cc2c7e35cfd9af747c76 /src/test/ui/hygiene
parent6526e5c772f2da07db745c94ca6bb0a591a39ba4 (diff)
resolve: Simplify collection of traits in scope
Diffstat (limited to 'src/test/ui/hygiene')
-rw-r--r--src/test/ui/hygiene/traits-in-scope.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/traits-in-scope.rs b/src/test/ui/hygiene/traits-in-scope.rs
new file mode 100644
index 00000000000..548bb226b71
--- /dev/null
+++ b/src/test/ui/hygiene/traits-in-scope.rs
@@ -0,0 +1,53 @@
+// Macros with def-site hygiene still bring traits into scope.
+// It is not clear whether this is desirable behavior or not.
+// It is also not clear how to prevent it if it is not desirable.
+
+// check-pass
+
+#![feature(decl_macro)]
+#![feature(trait_alias)]
+
+mod traits {
+    pub trait Trait1 {
+        fn simple_import(&self) {}
+    }
+    pub trait Trait2 {
+        fn renamed_import(&self) {}
+    }
+    pub trait Trait3 {
+        fn underscore_import(&self) {}
+    }
+    pub trait Trait4 {
+        fn trait_alias(&self) {}
+    }
+
+    impl Trait1 for () {}
+    impl Trait2 for () {}
+    impl Trait3 for () {}
+    impl Trait4 for () {}
+}
+
+macro m1() {
+    use traits::Trait1;
+}
+macro m2() {
+    use traits::Trait2 as Alias;
+}
+macro m3() {
+    use traits::Trait3 as _;
+}
+macro m4() {
+    trait Alias = traits::Trait4;
+}
+
+fn main() {
+    m1!();
+    m2!();
+    m3!();
+    m4!();
+
+    ().simple_import();
+    ().renamed_import();
+    ().underscore_import();
+    ().trait_alias();
+}