diff --git a/reid-llvm-lib/src/lib.rs b/reid-llvm-lib/src/lib.rs index 4d307b1..ec544ae 100644 --- a/reid-llvm-lib/src/lib.rs +++ b/reid-llvm-lib/src/lib.rs @@ -142,12 +142,13 @@ impl<'ctx> Module<'ctx> { triple, c"generic".as_ptr(), c"".as_ptr(), - llvm_sys::target_machine::LLVMCodeGenOptLevel::LLVMCodeGenLevelDefault, + llvm_sys::target_machine::LLVMCodeGenOptLevel::LLVMCodeGenLevelNone, llvm_sys::target_machine::LLVMRelocMode::LLVMRelocDefault, llvm_sys::target_machine::LLVMCodeModel::LLVMCodeModelDefault, ); let data_layout = LLVMCreateTargetDataLayout(target_machine); + LLVMSetTarget(self.module_ref, triple); LLVMSetModuleDataLayout(self.module_ref, data_layout); let mut err = ErrorMessageHolder::null(); @@ -178,7 +179,7 @@ impl<'ctx> Module<'ctx> { ); err.into_result().unwrap(); - Ok(from_cstring(LLVMPrintModuleToString(self.module_ref)).expect("UTF8-err")) + from_cstring(LLVMPrintModuleToString(self.module_ref)).ok_or("UTF-8 error".to_owned()) } } } diff --git a/reid-llvm-lib/src/util.rs b/reid-llvm-lib/src/util.rs index efe5e9f..ec8b00f 100644 --- a/reid-llvm-lib/src/util.rs +++ b/reid-llvm-lib/src/util.rs @@ -1,5 +1,5 @@ use std::{ - ffi::{CString, c_char}, + ffi::{CStr, CString, c_char}, ptr::null_mut, }; @@ -10,11 +10,11 @@ pub fn into_cstring>(value: T) -> CString { unsafe { CString::from_vec_with_nul_unchecked((string + "\0").into_bytes()) } } -pub fn from_cstring(value: *mut c_char) -> Option { - if value.is_null() { +pub fn from_cstring(pointer: *mut c_char) -> Option { + if pointer.is_null() { None } else { - unsafe { CString::from_raw(value).into_string().ok() } + unsafe { CStr::from_ptr(pointer).to_str().ok().map(|s| s.to_owned()) } } }