summaryrefslogtreecommitdiffstats
path: root/src/test/ui/hygiene/generate-mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/hygiene/generate-mod.rs')
-rw-r--r--src/test/ui/hygiene/generate-mod.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/generate-mod.rs b/src/test/ui/hygiene/generate-mod.rs
new file mode 100644
index 000000000..882629354
--- /dev/null
+++ b/src/test/ui/hygiene/generate-mod.rs
@@ -0,0 +1,49 @@
+// This is an equivalent of issue #50504, but for declarative macros.
+
+#![feature(decl_macro, rustc_attrs)]
+
+macro genmod($FromOutside: ident, $Outer: ident) {
+ type A = $FromOutside;
+ struct $Outer;
+ mod inner {
+ type A = $FromOutside; // `FromOutside` shouldn't be available from here
+ type Inner = $Outer; // `Outer` shouldn't be available from here
+ }
+}
+
+#[rustc_macro_transparency = "transparent"]
+macro genmod_transparent() {
+ type A = FromOutside;
+ struct Outer;
+ mod inner {
+ type A = FromOutside; //~ ERROR cannot find type `FromOutside` in this scope
+ type Inner = Outer; //~ ERROR cannot find type `Outer` in this scope
+ }
+}
+
+macro_rules! genmod_legacy { () => {
+ type A = FromOutside;
+ struct Outer;
+ mod inner {
+ type A = FromOutside; //~ ERROR cannot find type `FromOutside` in this scope
+ type Inner = Outer; //~ ERROR cannot find type `Outer` in this scope
+ }
+}}
+
+fn check() {
+ struct FromOutside;
+ genmod!(FromOutside, Outer); //~ ERROR cannot find type `FromOutside` in this scope
+ //~| ERROR cannot find type `Outer` in this scope
+}
+
+fn check_transparent() {
+ struct FromOutside;
+ genmod_transparent!();
+}
+
+fn check_legacy() {
+ struct FromOutside;
+ genmod_legacy!();
+}
+
+fn main() {}