]> git.lizzy.rs Git - rust.git/commitdiff
auto merge of #8361 : alexcrichton/rust/fix-node-hashes-in-crates, r=thestinger
authorbors <bors@rust-lang.org>
Fri, 9 Aug 2013 09:53:08 +0000 (02:53 -0700)
committerbors <bors@rust-lang.org>
Fri, 9 Aug 2013 09:53:08 +0000 (02:53 -0700)
When running rusti 32-bit tests from a 64-bit host, these errors came up frequently. My best idea as to what was happening is:

1. First, if you hash the same `int` value on 32-bit and 64-bit, you will get two different hashes.
2. In a cross-compile situation, let's say x86_64 is building an i686 library, all of the hashes will be 64-bit hashes.
3. Then let's say you use the i686 libraries and then attempt to link against the same i686 libraries, because you're calculating hashes with a 32-bit int instead of a 64-bit one, you'll have different hashes and you won't be able to find items in the metadata (the items were generated with a 64-bit int).

This patch changes the items to always be hashed as an `i64` to preserve the hash value across architectures. Here's a nice before/after for this patch of the state of rusti tests

```
host   target  before  after
64     64      yes     yes
64     32      no      no (llvm assertion)
32     64      no      yes
32     32      no      no (llvm assertion)
```

Basically one case started working, but currently when the target is 32-bit LLVM is having a lot of problems generating code. That's another separate issue though.

1  2 
src/librustc/metadata/decoder.rs

Simple merge