// Specifying how rustc outputs a file can be done in different ways, such as // the output flag or the KIND=NAME syntax. However, some of these methods used // to result in different hashes on output files even though they yielded the // exact same result otherwise. This was fixed in #86045, and this test checks // that the hash is only modified when the output is made different, such as by // adding a new output type (in this test, metadata). // See https://github.com/rust-lang/rust/issues/86044 use run_make_support::{diff, rfs, rustc}; fn main() { rfs::create_dir("emit"); rfs::create_dir("emit/a"); rfs::create_dir("emit/b"); rfs::create_dir("emit/c"); // The default output name. rustc().emit("link").input("foo.rs").run(); // The output is named with the output flag. rustc().emit("link").output("emit/a/libfoo.rlib").input("foo.rs").run(); // The output is named with link=NAME. rustc().emit("link=emit/b/libfoo.rlib").input("foo.rs").run(); // The output is named with link=NAME, with an additional kind tacked on. rustc().emit("link=emit/c/libfoo.rlib,metadata").input("foo.rs").run(); let base = rustc().arg("-Zls=root").input("libfoo.rlib").run().stdout_utf8(); let a = rustc().arg("-Zls=root").input("emit/a/libfoo.rlib").run().stdout_utf8(); let b = rustc().arg("-Zls=root").input("emit/b/libfoo.rlib").run().stdout_utf8(); let c = rustc().arg("-Zls=root").input("emit/c/libfoo.rlib").run().stdout_utf8(); // Both the output flag and link=NAME methods do not modify the hash of the output file. diff().expected_text("base", &base).actual_text("a", a).run(); diff().expected_text("base", &base).actual_text("b", b).run(); // However, having multiple types of outputs does modify the hash. diff().expected_text("base", &base).actual_text("c", c).run_fail(); }