summaryrefslogtreecommitdiffstats
path: root/src/test/ui/hygiene/auxiliary/unhygienic_example.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/hygiene/auxiliary/unhygienic_example.rs')
-rw-r--r--src/test/ui/hygiene/auxiliary/unhygienic_example.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/auxiliary/unhygienic_example.rs b/src/test/ui/hygiene/auxiliary/unhygienic_example.rs
new file mode 100644
index 000000000..8e6e8f9b3
--- /dev/null
+++ b/src/test/ui/hygiene/auxiliary/unhygienic_example.rs
@@ -0,0 +1,27 @@
+#![crate_type = "lib"]
+
+extern crate my_crate;
+
+pub fn g() {} // (a)
+
+#[macro_export]
+macro_rules! unhygienic_macro {
+ () => {
+ // (1) unhygienic: depends on `my_crate` in the crate root at the invocation site.
+ ::my_crate::f();
+
+ // (2) unhygienic: defines `f` at the invocation site (in addition to the above point).
+ use my_crate::f;
+ f();
+
+ g(); // (3) unhygienic: `g` needs to be in scope at use site.
+
+ $crate::g(); // (4) hygienic: this always resolves to (a)
+ }
+}
+
+#[allow(unused)]
+fn test_unhygienic() {
+ unhygienic_macro!();
+ f(); // `f` was defined at the use site
+}