about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/rustc/metadata/encoder.rs14
-rw-r--r--src/test/auxiliary/issue-2414-a.rs5
-rw-r--r--src/test/auxiliary/issue-2414-b.rs9
-rw-r--r--src/test/run-pass/issue-2414-c.rs7
4 files changed, 30 insertions, 5 deletions
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index e10554c79ed..9ad1ef1a4e1 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -396,17 +396,21 @@ fn encode_info_for_mod(ecx: @encode_ctxt, ebml_w: ebml::writer, md: _mod,
         let (ident, did) = i;
         if ast_util::is_exported(ident, md) {
             ebml_w.start_tag(tag_mod_impl);
+            alt ecx.tcx.items.find(did.node) {
+              some(ast_map::node_item(it@@{node: cl@item_class(*),_},_)) {
             /* If did stands for an iface
             ref, we need to map it to its parent class */
-            alt ecx.tcx.items.get(did.node) {
-              ast_map::node_item(it@@{node: cl@item_class(*),_},_) {
                 ebml_w.wr_str(def_to_str(local_def(it.id)));
               }
-              ast_map::node_item(@{node: item_impl(_,_,
-                                                   some(ifce),_,_),_},_) {
+              some(ast_map::node_item(@{node: item_impl(_,_,
+                                                   some(ifce),_,_),_},_)) {
                 ebml_w.wr_str(def_to_str(did));
               }
-              _ {
+              some(_) {
+                ebml_w.wr_str(def_to_str(did));
+              }
+              none {
+                // Must be a re-export, then!
                 ebml_w.wr_str(def_to_str(did));
               }
             };
diff --git a/src/test/auxiliary/issue-2414-a.rs b/src/test/auxiliary/issue-2414-a.rs
new file mode 100644
index 00000000000..0f4b51a8dad
--- /dev/null
+++ b/src/test/auxiliary/issue-2414-a.rs
@@ -0,0 +1,5 @@
+#[link(name = "a", vers = "0.1")];
+#[crate_type = "lib"];
+
+type t1 = uint;
+impl t2 for str { }
diff --git a/src/test/auxiliary/issue-2414-b.rs b/src/test/auxiliary/issue-2414-b.rs
new file mode 100644
index 00000000000..b5a27c6fabc
--- /dev/null
+++ b/src/test/auxiliary/issue-2414-b.rs
@@ -0,0 +1,9 @@
+// xfail-fast
+
+#[link(name = "b", vers = "0.1")];
+#[crate_type = "lib"];
+
+use a;
+
+import a::t2;
+export t2;
diff --git a/src/test/run-pass/issue-2414-c.rs b/src/test/run-pass/issue-2414-c.rs
new file mode 100644
index 00000000000..17defc82e22
--- /dev/null
+++ b/src/test/run-pass/issue-2414-c.rs
@@ -0,0 +1,7 @@
+// xfail-fast
+// aux-build:issue-2414-a.rs
+// aux-build:issue-2414-b.rs
+
+use b;
+
+fn main() {}