From 537b70e4f7abc74d448f1c066f944f27a4cad4a4 Mon Sep 17 00:00:00 2001 From: Chris Nuernberger <cnuernber@gmail.com> Date: Thu, 8 Mar 2018 22:14:46 -0300 Subject: [PATCH] Assert dont crash on null strides (#976) --- src/pass/arg_binder.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pass/arg_binder.cc b/src/pass/arg_binder.cc index cdd344670..8139a5644 100644 --- a/src/pass/arg_binder.cc +++ b/src/pass/arg_binder.cc @@ -194,6 +194,9 @@ void ArgBinder::BindDLTensor(const Buffer& buffer, init_nest_.emplace_back(LetStmt::make( v_strides, TVMArrayGet(Handle(), handle, intrinsic::kArrStrides), nop)); + Expr is_null = Call::make( + Bool(1), intrinsic::tvm_handle_is_null, + {v_strides}, Call::PureIntrinsic); if (buffer->strides.size() == 0) { // Assert the buffer is compact Type stype = buffer->DefaultIndexType(); @@ -215,13 +218,14 @@ void ArgBinder::BindDLTensor(const Buffer& buffer, Stmt check = AssertStmt::make(arith::ComputeReduce<ir::And>(conds, Expr()), stride_err_msg.str(), Evaluate::make(0)); - Expr is_null = Call::make( - Bool(1), intrinsic::tvm_handle_is_null, - {v_strides}, Call::PureIntrinsic); check = IfThenElse::make(Not::make(is_null), check, Stmt()); init_nest_.emplace_back(Block::make(check, Evaluate::make(0))); } } else { + std::ostringstream stride_null_err_msg; + stride_null_err_msg << arg_name << ".strides: expected non-null strides."; + asserts_.emplace_back(AssertStmt::make(Not::make(is_null), stride_null_err_msg.str(), nop)); + for (size_t k = 0; k < buffer->strides.size(); ++k) { std::ostringstream field_name; field_name << v_strides->name_hint << '[' << k << ']'; -- GitLab