]> git.lizzy.rs Git - rust.git/commitdiff
rustc: Get LLVM error message safely
authorklutzy <klutzytheklutzy@gmail.com>
Thu, 6 Mar 2014 14:57:31 +0000 (23:57 +0900)
committerklutzy <klutzytheklutzy@gmail.com>
Thu, 6 Mar 2014 15:18:32 +0000 (00:18 +0900)
On Windows, `LLVMRustGetLastError()` may return non-utf8 mojibake string
if system uses non-English locale. It caused ICE when llvm fails.
This patch doesn't fix the real problem, but just make rustc not die.

src/librustc/back/link.rs

index 09e5b99fc236fd5d452bbe00ba3eb0e027e0d8d6..0b7450e5265217f8d098541db2263ce7bd0b8590 100644 (file)
@@ -26,7 +26,7 @@
 use util::ppaux;
 use util::sha2::{Digest, Sha256};
 
-use std::c_str::ToCStr;
+use std::c_str::{ToCStr, CString};
 use std::char;
 use std::os::consts::{macos, freebsd, linux, android, win32};
 use std::ptr;
@@ -61,7 +61,9 @@ pub fn llvm_err(sess: Session, msg: ~str) -> ! {
         if cstr == ptr::null() {
             sess.fatal(msg);
         } else {
-            sess.fatal(msg + ": " + str::raw::from_c_str(cstr));
+            let err = CString::new(cstr, false);
+            let err = str::from_utf8_lossy(err.as_bytes());
+            sess.fatal(msg + ": " + err.as_slice());
         }
     }
 }