diff options
| author | William Throwe <wtt6@cornell.edu> | 2015-09-25 00:46:33 -0400 |
|---|---|---|
| committer | William Throwe <wtt6@cornell.edu> | 2015-09-26 01:54:12 -0400 |
| commit | eef6030c9245a63abb2102425f65b97b35b33568 (patch) | |
| tree | f8e574990e252712f781945c22e4e6584daccff8 | |
| parent | 8fe79bdfdacb2f5914971bd1a0b63b9577afbf6a (diff) | |
| download | rust-eef6030c9245a63abb2102425f65b97b35b33568.tar.gz rust-eef6030c9245a63abb2102425f65b97b35b33568.zip | |
Don't ICE if an archive isn't actually an archive
| -rw-r--r-- | src/librustc_trans/back/archive.rs | 7 | ||||
| -rw-r--r-- | src/librustc_trans/back/link.rs | 4 | ||||
| -rw-r--r-- | src/test/run-make/invalid-staticlib/Makefile | 5 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/librustc_trans/back/archive.rs b/src/librustc_trans/back/archive.rs index 76bbce00f19..1b3242eb97d 100644 --- a/src/librustc_trans/back/archive.rs +++ b/src/librustc_trans/back/archive.rs @@ -145,10 +145,13 @@ impl<'a> ArchiveBuilder<'a> { /// Adds all of the contents of a native library to this archive. This will /// search in the relevant locations for a library named `name`. - pub fn add_native_library(&mut self, name: &str) -> io::Result<()> { + pub fn add_native_library(&mut self, name: &str) { let location = find_library(name, &self.config.lib_search_paths, self.config.sess); - self.add_archive(&location, name, |_| false) + self.add_archive(&location, name, |_| false).unwrap_or_else(|e| { + self.config.sess.fatal(&format!("failed to add native library {}: {}", + location.to_string_lossy(), e)); + }); } /// Adds all of the contents of the rlib at the specified path to this diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index f25132e1856..4e493e6779c 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -616,7 +616,7 @@ fn link_rlib<'a>(sess: &'a Session, for &(ref l, kind) in sess.cstore.get_used_libraries().borrow().iter() { match kind { - cstore::NativeStatic => ab.add_native_library(&l).unwrap(), + cstore::NativeStatic => ab.add_native_library(&l), cstore::NativeFramework | cstore::NativeUnknown => {} } } @@ -792,7 +792,7 @@ fn link_staticlib(sess: &Session, objects: &[PathBuf], out_filename: &Path, ab.build(); } if !sess.target.target.options.no_compiler_rt { - ab.add_native_library("compiler-rt").unwrap(); + ab.add_native_library("compiler-rt"); } let mut all_native_libs = vec![]; diff --git a/src/test/run-make/invalid-staticlib/Makefile b/src/test/run-make/invalid-staticlib/Makefile new file mode 100644 index 00000000000..d4aa6d5e720 --- /dev/null +++ b/src/test/run-make/invalid-staticlib/Makefile @@ -0,0 +1,5 @@ +-include ../tools.mk + +all: + touch $(TMPDIR)/libfoo.a + echo | $(RUSTC) - --crate-type=rlib -lstatic=foo 2>&1 | grep "failed to add native library" |
