From b0d85e30b75fb7a2568dba9a535e8ea8e0291fef Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 15 Apr 2014 07:47:26 -0700 Subject: [PATCH] rustc: Don't die when a crate id can't be inferred The filestem of the desired output isn't necessarily a valid crate id, and calling unwrap() will trigger an ICE in rustc. This tries a little harder to infer a "valid crate id" from a crate, with an eventual fallback to a generic crate id if alll else fails. Closes #11107 --- src/librustc/back/link.rs | 5 ++++- src/test/run-make/weird-output-filenames/Makefile | 9 +++++++++ src/test/run-make/weird-output-filenames/foo.rs | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/test/run-make/weird-output-filenames/Makefile create mode 100644 src/test/run-make/weird-output-filenames/foo.rs diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index f6846acaa99..17a09aa4909 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -516,7 +516,10 @@ pub mod write { pub fn find_crate_id(attrs: &[ast::Attribute], out_filestem: &str) -> CrateId { match attr::find_crateid(attrs) { - None => from_str(out_filestem).unwrap(), + None => from_str(out_filestem).unwrap_or_else(|| { + let mut s = out_filestem.chars().filter(|c| c.is_XID_continue()); + from_str(s.collect::<~str>()).or(from_str("rust-out")).unwrap() + }), Some(s) => s, } } diff --git a/src/test/run-make/weird-output-filenames/Makefile b/src/test/run-make/weird-output-filenames/Makefile new file mode 100644 index 00000000000..9d852bce6f6 --- /dev/null +++ b/src/test/run-make/weird-output-filenames/Makefile @@ -0,0 +1,9 @@ +-include ../tools.mk + +all: + $(RUSTC) foo.rs -o $(TMPDIR)/.foo + rm $(TMPDIR)/.foo + $(RUSTC) foo.rs -o $(TMPDIR)/.foo.bar + rm $(TMPDIR)/.foo.bar + $(RUSTC) foo.rs -o $(TMPDIR)/+foo+bar + rm $(TMPDIR)/+foo+bar diff --git a/src/test/run-make/weird-output-filenames/foo.rs b/src/test/run-make/weird-output-filenames/foo.rs new file mode 100644 index 00000000000..8ae3d072362 --- /dev/null +++ b/src/test/run-make/weird-output-filenames/foo.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() {}