Better error when rustc fails to write output.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import libc::{c_int, c_uint};
|
||||
import libc::{c_int, c_uint, c_char};
|
||||
import driver::session;
|
||||
import session::session;
|
||||
import lib::llvm::llvm;
|
||||
@@ -32,6 +32,21 @@ fn llvm_err(sess: session, msg: str) -> ! unsafe {
|
||||
} else { sess.fatal(msg + ": " + str::unsafe::from_c_str(cstr)); }
|
||||
}
|
||||
|
||||
fn WriteOutputFile(sess:session,
|
||||
PM: lib::llvm::PassManagerRef, M: ModuleRef,
|
||||
Triple: *c_char,
|
||||
// FIXME: When #2334 is fixed, change
|
||||
// c_uint to FileType
|
||||
Output: *c_char, FileType: c_uint,
|
||||
OptLevel: c_int,
|
||||
EnableSegmentedStacks: bool) {
|
||||
let result = llvm::LLVMRustWriteOutputFile(
|
||||
PM, M, Triple, Output, FileType, OptLevel, EnableSegmentedStacks);
|
||||
if (!result) {
|
||||
llvm_err(sess, "Could not write output");
|
||||
}
|
||||
}
|
||||
|
||||
mod write {
|
||||
fn is_object_or_assembly_or_exe(ot: output_type) -> bool {
|
||||
if ot == output_type_assembly || ot == output_type_object ||
|
||||
@@ -160,7 +175,8 @@ mod write {
|
||||
sess.targ_cfg.target_strs.target_triple,
|
||||
|buf_t| {
|
||||
str::as_c_str(output, |buf_o| {
|
||||
llvm::LLVMRustWriteOutputFile(
|
||||
WriteOutputFile(
|
||||
sess,
|
||||
pm.llpm,
|
||||
llmod,
|
||||
buf_t,
|
||||
@@ -181,7 +197,8 @@ mod write {
|
||||
sess.targ_cfg.target_strs.target_triple,
|
||||
|buf_t| {
|
||||
str::as_c_str(output, |buf_o| {
|
||||
llvm::LLVMRustWriteOutputFile(
|
||||
WriteOutputFile(
|
||||
sess,
|
||||
pm.llpm,
|
||||
llmod,
|
||||
buf_t,
|
||||
@@ -200,7 +217,8 @@ mod write {
|
||||
sess.targ_cfg.target_strs.target_triple,
|
||||
|buf_t| {
|
||||
str::as_c_str(output, |buf_o| {
|
||||
llvm::LLVMRustWriteOutputFile(
|
||||
WriteOutputFile(
|
||||
sess,
|
||||
pm.llpm,
|
||||
llmod,
|
||||
buf_t,
|
||||
|
||||
@@ -941,7 +941,7 @@ extern mod llvm {
|
||||
// c_uint to FileType
|
||||
Output: *c_char, FileType: c_uint,
|
||||
OptLevel: c_int,
|
||||
EnableSegmentedStacks: bool);
|
||||
EnableSegmentedStacks: bool) -> bool;
|
||||
|
||||
/** Returns a string describing the last error caused by an LLVMRust*
|
||||
call. */
|
||||
|
||||
Reference in New Issue
Block a user