diff options
| author | Simonas Kazlauskas <git@kazlauskas.me> | 2015-06-06 01:13:19 +0300 |
|---|---|---|
| committer | Simonas Kazlauskas <git@kazlauskas.me> | 2015-06-07 20:34:12 +0300 |
| commit | ab86face01786a67da3f6d15db0c3295d75dcdd6 (patch) | |
| tree | 24ab801e391dbd7ae9a5db187a5c79e8a9f4526e /src | |
| parent | c78c0994b1df5e365058f301330d06fa035c3734 (diff) | |
| download | rust-ab86face01786a67da3f6d15db0c3295d75dcdd6.tar.gz rust-ab86face01786a67da3f6d15db0c3295d75dcdd6.zip | |
Don’t ICE if fs::canonicalise fails in meta-load
This might fail when --extern library is a symlink to an invalid location. Instead just pretend it doesn’t exist at all.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/metadata/loader.rs | 15 | ||||
| -rw-r--r-- | src/test/run-make/issue-26006/Makefile | 16 | ||||
| -rw-r--r-- | src/test/run-make/issue-26006/in/libc/lib.rs | 12 | ||||
| -rw-r--r-- | src/test/run-make/issue-26006/in/time/lib.rs | 13 |
4 files changed, 49 insertions, 7 deletions
diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index f96094d3d09..5f1e30ae63a 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -429,13 +429,14 @@ impl<'a> Context<'a> { let slot = candidates.entry(hash_str) .or_insert_with(|| (HashMap::new(), HashMap::new())); let (ref mut rlibs, ref mut dylibs) = *slot; - if rlib { - rlibs.insert(fs::canonicalize(path).unwrap(), kind); - } else { - dylibs.insert(fs::canonicalize(path).unwrap(), kind); - } - - FileMatches + fs::canonicalize(path).map(|p| { + if rlib { + rlibs.insert(p, kind); + } else { + dylibs.insert(p, kind); + } + FileMatches + }).unwrap_or(FileDoesntMatch) }); self.rejected_via_kind.extend(staticlibs.into_iter()); diff --git a/src/test/run-make/issue-26006/Makefile b/src/test/run-make/issue-26006/Makefile new file mode 100644 index 00000000000..10c789d20c0 --- /dev/null +++ b/src/test/run-make/issue-26006/Makefile @@ -0,0 +1,16 @@ +-include ../tools.mk + +ifndef IS_WINDOWS +all: time + +time: libc + mkdir -p out/time out/time/deps + ln -sf out/libc/liblibc.rlib out/time/deps/ + $(RUSTC) in/time/lib.rs -Ldependency=out/time/deps/ + +libc: + mkdir -p out/libc + $(RUSTC) in/libc/lib.rs --crate-name=libc -o out/libc/liblibc.rlib +else +all: +endif diff --git a/src/test/run-make/issue-26006/in/libc/lib.rs b/src/test/run-make/issue-26006/in/libc/lib.rs new file mode 100644 index 00000000000..177ffdce062 --- /dev/null +++ b/src/test/run-make/issue-26006/in/libc/lib.rs @@ -0,0 +1,12 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +#![crate_type="rlib"] + +pub fn something(){} diff --git a/src/test/run-make/issue-26006/in/time/lib.rs b/src/test/run-make/issue-26006/in/time/lib.rs new file mode 100644 index 00000000000..b1d07d57337 --- /dev/null +++ b/src/test/run-make/issue-26006/in/time/lib.rs @@ -0,0 +1,13 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +#![feature(libc)] +extern crate libc; + +fn main(){} |
