This is an automated email from the ASF dual-hosted git repository. jroesch pushed a commit to branch cargo-build in repository https://gitbox.apache.org/repos/asf/incubator-tvm.git
commit eeb86c63d693288f8d406aed6b1b0df6d28e4b07 Author: Jared Roesch <roesch...@gmail.com> AuthorDate: Thu Oct 15 21:37:34 2020 -0700 Fix calling --- rust/tvm-rt/src/function.rs | 28 +++++++++++++++++----------- rust/tvm/src/bin/tyck.rs | 2 +- rust/tvm/src/ir/diagnostics/mod.rs | 4 +--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/rust/tvm-rt/src/function.rs b/rust/tvm-rt/src/function.rs index bae06e9..c7aebdd 100644 --- a/rust/tvm-rt/src/function.rs +++ b/rust/tvm-rt/src/function.rs @@ -33,6 +33,7 @@ use std::{ }; use crate::errors::Error; +use crate::object::ObjectPtr; pub use super::to_function::{ToFunction, Typed}; pub use tvm_sys::{ffi, ArgValue, RetValue}; @@ -120,21 +121,26 @@ impl Function { let mut ret_val = ffi::TVMValue { v_int64: 0 }; let mut ret_type_code = 0i32; - check_call!(ffi::TVMFuncCall( - self.handle, - values.as_mut_ptr() as *mut ffi::TVMValue, - type_codes.as_mut_ptr() as *mut c_int, - num_args as c_int, - &mut ret_val as *mut _, - &mut ret_type_code as *mut _ - )); + let ret_code = unsafe { + ffi::TVMFuncCall( + self.handle, + values.as_mut_ptr() as *mut ffi::TVMValue, + type_codes.as_mut_ptr() as *mut c_int, + num_args as c_int, + &mut ret_val as *mut _, + &mut ret_type_code as *mut _ + ) + }; + + if ret_code != 0 { + return Err(Error::CallFailed(crate::get_last_error().into())); + } let rv = RetValue::from_tvm_value(ret_val, ret_type_code as u32); match rv { RetValue::ObjectHandle(object) => { - let optr = crate::object::ObjectPtr::from_raw(object as _).unwrap(); - // println!("after wrapped call: {}", optr.count()); - crate::object::ObjectPtr::leak(optr); + let optr = ObjectPtr::from_raw(object as _).unwrap(); + ObjectPtr::leak(optr); } _ => {} }; diff --git a/rust/tvm/src/bin/tyck.rs b/rust/tvm/src/bin/tyck.rs index e0c7136..fbab027 100644 --- a/rust/tvm/src/bin/tyck.rs +++ b/rust/tvm/src/bin/tyck.rs @@ -18,7 +18,7 @@ fn main() -> Result<()> { codespan::init().expect("Rust based diagnostics"); let opt = Opt::from_args(); println!("{:?}", &opt); - let module = IRModule::parse_file(opt.input)?; + let module = IRModule::parse_file(opt.input); // for (k, v) in module.functions { // println!("Function name: {:?}", v); diff --git a/rust/tvm/src/ir/diagnostics/mod.rs b/rust/tvm/src/ir/diagnostics/mod.rs index fce214a..039d1ed 100644 --- a/rust/tvm/src/ir/diagnostics/mod.rs +++ b/rust/tvm/src/ir/diagnostics/mod.rs @@ -207,9 +207,7 @@ impl DiagnosticContext { } } -// Override the global diagnostics renderer. -// Params -// ------ +/// Override the global diagnostics renderer. // render_func: Option[Callable[[DiagnosticContext], None]] // If the render_func is None it will remove the current custom renderer // and return to default behavior.