about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2014-01-20 09:22:46 -0800
committerSteven Fackler <sfackler@gmail.com>2014-01-20 09:22:46 -0800
commitd049c27f5b7e100ee0a286dfa8886d89b78e03e9 (patch)
tree5f276fbf191eaa36ba6470b69900147a1c7e0313
parent0e6455e2b8ee707c0683c67ba224b7682aff4e85 (diff)
downloadrust-d049c27f5b7e100ee0a286dfa8886d89b78e03e9.tar.gz
rust-d049c27f5b7e100ee0a286dfa8886d89b78e03e9.zip
Scan the entire crate for exported macros
It previously missed anything in an inner module.
-rw-r--r--src/librustc/metadata/encoder.rs1
-rw-r--r--src/test/auxiliary/macro_export_inner_module.rs18
-rw-r--r--src/test/run-pass/macro-export-inner-module.rs22
3 files changed, 41 insertions, 0 deletions
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index baa72105577..c58a02b6b20 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -1720,6 +1720,7 @@ impl<'a, 'b> Visitor<()> for MacroDefVisitor<'a, 'b> {
             }
             _ => {}
         }
+        visit::walk_item(self, item, ());
     }
 }
 
diff --git a/src/test/auxiliary/macro_export_inner_module.rs b/src/test/auxiliary/macro_export_inner_module.rs
new file mode 100644
index 00000000000..a3b7904f423
--- /dev/null
+++ b/src/test/auxiliary/macro_export_inner_module.rs
@@ -0,0 +1,18 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#[feature(macro_rules)];
+
+pub mod inner {
+    #[macro_export]
+    macro_rules! foo(
+        () => (1)
+    )
+}
diff --git a/src/test/run-pass/macro-export-inner-module.rs b/src/test/run-pass/macro-export-inner-module.rs
new file mode 100644
index 00000000000..ec8eaf68154
--- /dev/null
+++ b/src/test/run-pass/macro-export-inner-module.rs
@@ -0,0 +1,22 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//aux-build:macro_export_inner_module.rs
+//xfail-stage1
+//xfail-fast
+
+#[feature(phase)];
+
+#[phase(syntax)]
+extern mod macro_export_inner_module;
+
+pub fn main() {
+    assert_eq!(1, foo!());
+}