diff --git a/src/rustc/back/link.rs b/src/rustc/back/link.rs index db06639372b..114f02fd093 100644 --- a/src/rustc/back/link.rs +++ b/src/rustc/back/link.rs @@ -420,8 +420,7 @@ fn symbol_hash(tcx: ty::ctxt, sha: sha1, t: ty::t, link_meta: link_meta) -> sha.reset(); sha.input_str(link_meta.name); sha.input_str("-"); - // FIXME: This wants to be link_meta.meta_hash - sha.input_str(link_meta.name); + sha.input_str(link_meta.extras_hash); sha.input_str("-"); sha.input_str(encoder::encoded_ty(tcx, t)); let hash = truncated_sha1_result(sha); diff --git a/src/test/auxiliary/crateresolve6-1.rs b/src/test/auxiliary/crateresolve6-1.rs new file mode 100644 index 00000000000..fff8c1843e6 --- /dev/null +++ b/src/test/auxiliary/crateresolve6-1.rs @@ -0,0 +1,7 @@ +#[link(name = "crateresolve6", + vers = "0.1", + calories = "100")]; + +#[crate_type = "lib"]; + +fn f() -> int { 100 } diff --git a/src/test/auxiliary/crateresolve6-2.rs b/src/test/auxiliary/crateresolve6-2.rs new file mode 100644 index 00000000000..3623e2e48ba --- /dev/null +++ b/src/test/auxiliary/crateresolve6-2.rs @@ -0,0 +1,7 @@ +#[link(name = "crateresolve6", + vers = "0.1", + calories = "200")]; + +#[crate_type = "lib"]; + +fn f() -> int { 200 } diff --git a/src/test/run-pass/crateresolve6.rs b/src/test/run-pass/crateresolve6.rs new file mode 100644 index 00000000000..8c459c16ec2 --- /dev/null +++ b/src/test/run-pass/crateresolve6.rs @@ -0,0 +1,13 @@ +// xfail-fast +// aux-build:crateresolve6-1.rs +// aux-build:crateresolve6-2.rs +// error-pattern:mismatched types + +// These both have the same version but differ in other metadata +use cr6_1 (name = "crateresolve6", vers = "0.1", calories="100"); +use cr6_2 (name = "crateresolve6", vers = "0.1", calories="200"); + +fn main() { + assert cr6_1::f() == 100; + assert cr6_2::f() == 200; +}