diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index e97d83ed1ee..ed680feae0a 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -163,6 +163,13 @@ pub fn compile_input(trans: Box<TransCrate>,
             return Ok(())
         }
 
+        if let &Some(ref dir) = outdir {
+            if fs::create_dir_all(dir).is_err() {
+                sess.err("failed to find or create the directory specified by --out-dir");
+                return Err(CompileIncomplete::Stopped);
+            }
+        }
+
         let arenas = AllArenas::new();
 
         // Construct the HIR map