diff options
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 14 | ||||
| -rw-r--r-- | src/test/auxiliary/issue-2414-a.rs | 5 | ||||
| -rw-r--r-- | src/test/auxiliary/issue-2414-b.rs | 9 | ||||
| -rw-r--r-- | src/test/run-pass/issue-2414-c.rs | 7 |
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() {} |
