Skip to content

serde compilation is not deterministic #46846

Closed
@johnklai1

Description

@johnklai1

I was looking into why sccache was missing more than expected, and it looks like serde_derive compiles are not deterministic.

I tried this code on OSX 10.12 (Xcode 7.3.1)

> cd serde
> git checkout 0b89bc920e6052c05483c8b56661e859caae9d25
> cargo build
> md5 target/debug/deps/libserde_derive-*.dylib
(output: MD5 (target/debug/deps/libserde_derive-c403614b534b4e94.dylib) = be85fd8981e5bb5aa789a56d6f9ae4da)
> rm target/debug/deps/libserde_derive-*.dylib
> cargo build
> md5 target/debug/deps/libserde_derive-*.dylib
(output: MD5 (target/debug/deps/libserde_derive-c403614b534b4e94.dylib) = 5fc806ed2f22bdf7e9c3b0b018ca2671)

I expected that the MD5s would be identical after deleting and re-running cargo build. I ran with just the underlying rustc command, and that also generated different files each time. Here is the underlying rustc command:

rustc --crate-name serde_derive serde_derive/src/lib.rs --crate-type proc-macro --emit=dep-info,link -C prefer-dynamic -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="deserialize_from"' -C metadata=c403614b534b4e94 -C extra-filename=-c403614b534b4e94 --out-dir /Users/jklai/serde/target/debug/deps -L dependency=/Users/jklai/serde/target/debug/deps --extern syn=/Users/jklai/serde/target/debug/deps/libsyn-b667971f1cdadd98.rlib --extern quote=/Users/jklai/serde/target/debug/deps/libquote-34dfebedcb580111.rlib --extern serde_derive_internals=/Users/jklai/serde/target/debug/deps/libserde_derive_internals-3788ef8c57ed9e45.rlib

I have also tried this on Windows and Linux, and it also generates different serde_derive libraries when rebuilding.

Meta

rustc --version --verbose: rustc 1.24.0-nightly (dc39c31 2017-12-17)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions