about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2015-03-09 16:30:26 +0530
committerManish Goregaokar <manishsmail@gmail.com>2015-03-09 17:59:20 +0530
commitbfcf53f7ad6de8cda2ee4367b2de001fa97d8b0b (patch)
tree4b364a065e84758b926add4c17754827ef039402
parent43984618eb5c56d69ef1659fd506e26a0fd2d9bb (diff)
parent103636114d67417048758b4a4d236383af2d44dd (diff)
downloadrust-bfcf53f7ad6de8cda2ee4367b2de001fa97d8b0b.tar.gz
rust-bfcf53f7ad6de8cda2ee4367b2de001fa97d8b0b.zip
Rollup merge of #23210 - richo:rust-o, r=alexcrichton
 rustc will ICE if you specify an outfile path that is bare without a
directory. As a workaround, before this -o ./foo will work

It wasn't clear to me where I could put a test that actually invokes rustc from a shell, although I think I can add doctests to that machinery in librustc_driver that will arrange for this to be called with arguments that would trigger the ICE
-rw-r--r--src/librustc_driver/driver.rs7
-rw-r--r--src/test/run-make/bare-outfile/Makefile4
-rw-r--r--src/test/run-make/bare-outfile/foo.rs12
3 files changed, 21 insertions, 2 deletions
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index 565782b29e9..dc27a301109 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -927,7 +927,7 @@ pub fn build_output_filenames(input: &Input,
             // We want to toss everything after the final '.'
             let dirpath = match *odir {
                 Some(ref d) => d.clone(),
-                None => PathBuf::new(".")
+                None => PathBuf::new("")
             };
 
             // If a crate name is present, we use it as the link name
@@ -954,8 +954,11 @@ pub fn build_output_filenames(input: &Input,
             if *odir != None {
                 sess.warn("ignoring --out-dir flag due to -o flag.");
             }
+
+            let cur_dir = Path::new("");
+
             OutputFilenames {
-                out_directory: out_file.parent().unwrap().to_path_buf(),
+                out_directory: out_file.parent().unwrap_or(cur_dir).to_path_buf(),
                 out_filestem: out_file.file_stem().unwrap()
                                       .to_str().unwrap().to_string(),
                 single_output_file: ofile,
diff --git a/src/test/run-make/bare-outfile/Makefile b/src/test/run-make/bare-outfile/Makefile
new file mode 100644
index 00000000000..e6cd3851e03
--- /dev/null
+++ b/src/test/run-make/bare-outfile/Makefile
@@ -0,0 +1,4 @@
+-include ../tools.mk
+
+all:
+	rustc -o foo foo.rs
diff --git a/src/test/run-make/bare-outfile/foo.rs b/src/test/run-make/bare-outfile/foo.rs
new file mode 100644
index 00000000000..63e747901ae
--- /dev/null
+++ b/src/test/run-make/bare-outfile/foo.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.
+
+fn main() {
+}