mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
auto merge of #10979 : alexcrichton/rust/less-bc, r=cmr
By performing this logic very late in the build process, it ended up leading to bugs like those found in #10973 where certain stages of the build process expected a particular output format which didn't end up being the case. In order to fix this, the build output generation is moved very early in the build process to the absolute first thing in phase 2. Closes #10973
This commit is contained in:
commit
3272b002b3
@ -728,17 +728,10 @@ pub fn link_binary(sess: Session,
|
||||
obj_filename: &Path,
|
||||
out_filename: &Path,
|
||||
lm: &LinkMeta) -> ~[Path] {
|
||||
// If we're generating a test executable, then ignore all other output
|
||||
// styles at all other locations
|
||||
let outputs = if sess.opts.test {
|
||||
~[session::OutputExecutable]
|
||||
} else {
|
||||
(*sess.outputs).clone()
|
||||
};
|
||||
|
||||
let mut out_filenames = ~[];
|
||||
for output in outputs.move_iter() {
|
||||
let out_file = link_binary_output(sess, trans, output, obj_filename, out_filename, lm);
|
||||
for &output in sess.outputs.iter() {
|
||||
let out_file = link_binary_output(sess, trans, output, obj_filename,
|
||||
out_filename, lm);
|
||||
out_filenames.push(out_file);
|
||||
}
|
||||
|
||||
|
@ -405,13 +405,13 @@ pub fn expect<T:Clone>(sess: Session, opt: Option<T>, msg: || -> ~str) -> T {
|
||||
}
|
||||
|
||||
pub fn building_library(options: &options, crate: &ast::Crate) -> bool {
|
||||
if options.test { return false }
|
||||
for output in options.outputs.iter() {
|
||||
match *output {
|
||||
OutputExecutable => {}
|
||||
OutputStaticlib | OutputDylib | OutputRlib => return true
|
||||
}
|
||||
}
|
||||
if options.test { return false }
|
||||
match syntax::attr::first_attr_value_str_by_name(crate.attrs, "crate_type") {
|
||||
Some(s) => "lib" == s || "rlib" == s || "dylib" == s || "staticlib" == s,
|
||||
_ => false
|
||||
@ -419,6 +419,11 @@ pub fn building_library(options: &options, crate: &ast::Crate) -> bool {
|
||||
}
|
||||
|
||||
pub fn collect_outputs(options: &options, crate: &ast::Crate) -> ~[OutputStyle] {
|
||||
// If we're generating a test executable, then ignore all other output
|
||||
// styles at all other locations
|
||||
if options.test {
|
||||
return ~[OutputExecutable];
|
||||
}
|
||||
let mut base = options.outputs.clone();
|
||||
let mut iter = crate.attrs.iter().filter_map(|a| {
|
||||
if "crate_type" == a.name() {
|
||||
|
7
src/test/run-make/no-intermediate-extras/Makefile
Normal file
7
src/test/run-make/no-intermediate-extras/Makefile
Normal file
@ -0,0 +1,7 @@
|
||||
# Regression test for issue #10973
|
||||
|
||||
-include ../tools.mk
|
||||
|
||||
all:
|
||||
$(RUSTC) --rlib --test foo.rs
|
||||
rm $(TMPDIR)/foo.bc && exit 1 || exit 0
|
0
src/test/run-make/no-intermediate-extras/foo.rs
Normal file
0
src/test/run-make/no-intermediate-extras/foo.rs
Normal file
Loading…
Reference in New Issue
Block a user