]> git.lizzy.rs Git - rust.git/commitdiff
rustc: fail if LLVM is passed an invalid triple
authorRicho Healey <richo@psych0tik.net>
Wed, 29 Oct 2014 01:58:46 +0000 (18:58 -0700)
committerRicho Healey <richo@psych0tik.net>
Wed, 29 Oct 2014 20:49:32 +0000 (13:49 -0700)
This changes create_target_machine to correctly return a Result (Since
the underlying LLVM function can fail and return NULL)

src/librustc/back/write.rs

index f1cd8b52e5ed3103fa8e2b0a09c87dcecfdae0d0..825e1a328bda3abc4740fa2e76751ec08f8b638d 100644 (file)
@@ -226,12 +226,10 @@ fn create_target_machine(sess: &Session) -> TargetMachineRef {
         }
     };
 
-    unsafe {
-        sess.targ_cfg
-             .target_strs
-             .target_triple
-             .as_slice()
-             .with_c_str(|t| {
+    let triple = sess.targ_cfg.target_strs.target_triple.as_slice();
+
+    let tm = unsafe {
+            triple.with_c_str(|t| {
             sess.opts.cg.target_cpu.as_slice().with_c_str(|cpu| {
                 target_feature(sess).with_c_str(|features| {
                     llvm::LLVMRustCreateTargetMachine(
@@ -249,7 +247,15 @@ fn create_target_machine(sess: &Session) -> TargetMachineRef {
                 })
             })
         })
-    }
+    };
+
+    if tm.is_null() {
+        llvm_err(sess.diagnostic().handler(),
+                 format!("Could not create LLVM TargetMachine for triple: {}",
+                         triple).to_string());
+    } else {
+        return tm;
+    };
 }