summaryrefslogtreecommitdiffstats
path: root/src/test/ui/hygiene/legacy_interaction.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/hygiene/legacy_interaction.rs')
-rw-r--r--src/test/ui/hygiene/legacy_interaction.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/legacy_interaction.rs b/src/test/ui/hygiene/legacy_interaction.rs
new file mode 100644
index 000000000..52008eed5
--- /dev/null
+++ b/src/test/ui/hygiene/legacy_interaction.rs
@@ -0,0 +1,42 @@
+// check-pass
+#![allow(dead_code)]
+// ignore-pretty pretty-printing is unhygienic
+
+// aux-build:legacy_interaction.rs
+
+#![feature(decl_macro)]
+#[allow(unused)]
+
+extern crate legacy_interaction;
+// ^ defines
+// ```rust
+// macro_rules! m {
+// () => {
+// fn f() {} // (1)
+// g() // (2)
+// }
+// }
+// ```rust
+
+mod def_site {
+ // Unless this macro opts out of hygiene, it should resolve the same wherever it is invoked.
+ pub macro m2() {
+ ::legacy_interaction::m!();
+ f(); // This should resolve to (1)
+ fn g() {} // We want (2) resolve to this, not to (4)
+ }
+}
+
+mod use_site {
+ fn test() {
+ fn f() -> bool { true } // (3)
+ fn g() -> bool { true } // (4)
+
+ ::def_site::m2!();
+
+ let _: bool = f(); // This should resolve to (3)
+ let _: bool = g(); // This should resolve to (4)
+ }
+}
+
+fn main() {}