Show better errors for LLVM IR output
I was trying to output LLVM IR directly to the console: $ rustc hello.rs --emit=llvm-ir -o /dev/stdout LLVM ERROR: IO failure on output stream: Bad file descriptor Now `LLVMRustPrintModule` returns an error, and we print: error: failed to write LLVM IR to /dev/stdout.hello.7rcbfp3g-cgu.0.rcgu.ll: Permission denied ... which is more informative.
This commit is contained in:
parent
acd8dd6a50
commit
aafe2c6da9
3 changed files with 26 additions and 13 deletions
|
@ -646,8 +646,9 @@ char RustPrintModulePass::ID = 0;
|
|||
INITIALIZE_PASS(RustPrintModulePass, "print-rust-module",
|
||||
"Print rust module to stderr", false, false)
|
||||
|
||||
extern "C" void LLVMRustPrintModule(LLVMPassManagerRef PMR, LLVMModuleRef M,
|
||||
const char *Path, DemangleFn Demangle) {
|
||||
extern "C" LLVMRustResult
|
||||
LLVMRustPrintModule(LLVMPassManagerRef PMR, LLVMModuleRef M,
|
||||
const char *Path, DemangleFn Demangle) {
|
||||
llvm::legacy::PassManager *PM = unwrap<llvm::legacy::PassManager>(PMR);
|
||||
std::string ErrorInfo;
|
||||
|
||||
|
@ -655,12 +656,18 @@ extern "C" void LLVMRustPrintModule(LLVMPassManagerRef PMR, LLVMModuleRef M,
|
|||
raw_fd_ostream OS(Path, EC, sys::fs::F_None);
|
||||
if (EC)
|
||||
ErrorInfo = EC.message();
|
||||
if (ErrorInfo != "") {
|
||||
LLVMRustSetLastError(ErrorInfo.c_str());
|
||||
return LLVMRustResult::Failure;
|
||||
}
|
||||
|
||||
formatted_raw_ostream FOS(OS);
|
||||
|
||||
PM->add(new RustPrintModulePass(FOS, Demangle));
|
||||
|
||||
PM->run(*unwrap(M));
|
||||
|
||||
return LLVMRustResult::Success;
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustPrintPasses() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue