From 6d6d33003cbb48722a8630c8b57b47209fe5dcc3 Mon Sep 17 00:00:00 2001 From: locnd182644 Date: Fri, 27 Feb 2026 14:08:25 +0700 Subject: [PATCH 1/5] [Runtime][Builtin] Handle mismatched type on argument #0 when calling Builtin runtime operators. - Expected `ffi.Tensor` but got `DLTensor` --- 3rdparty/cnpy | 1 + 3rdparty/dmlc-core | 1 + 3rdparty/rang | 1 + 3rdparty/zlib | 1 + src/runtime/vm/builtin.cc | 36 ++++++++++++++++++++++++++++++++---- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 160000 3rdparty/cnpy create mode 160000 3rdparty/dmlc-core create mode 160000 3rdparty/rang create mode 160000 3rdparty/zlib diff --git a/3rdparty/cnpy b/3rdparty/cnpy new file mode 160000 index 000000000000..4e8810b1a863 --- /dev/null +++ b/3rdparty/cnpy @@ -0,0 +1 @@ +Subproject commit 4e8810b1a8637695171ed346ce68f6984e585ef4 diff --git a/3rdparty/dmlc-core b/3rdparty/dmlc-core new file mode 160000 index 000000000000..3031e4a61a98 --- /dev/null +++ b/3rdparty/dmlc-core @@ -0,0 +1 @@ +Subproject commit 3031e4a61a98f49f07a42cfdec6242340fb2fd8c diff --git a/3rdparty/rang b/3rdparty/rang new file mode 160000 index 000000000000..cabe04d6d6b0 --- /dev/null +++ b/3rdparty/rang @@ -0,0 +1 @@ +Subproject commit cabe04d6d6b05356fa8f9741704924788f0dd762 diff --git a/3rdparty/zlib b/3rdparty/zlib new file mode 160000 index 000000000000..ef24c4c75021 --- /dev/null +++ b/3rdparty/zlib @@ -0,0 +1 @@ +Subproject commit ef24c4c7502169f016dcd2a26923dbaf3216748c diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index 35cc261e4d43..118ccff0b6b4 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -526,11 +526,39 @@ TVM_FFI_STATIC_INIT_BLOCK() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; refl::GlobalDef() - .def_method("vm.builtin.shape_of", [](Tensor data) -> ffi::Shape { return data.Shape(); }) + .def_method("vm.builtin.shape_of", + [](ffi::Any any) -> ffi::Shape { + if (auto opt_tensor = any.try_cast()) { + return opt_tensor.value().Shape(); + } else if (auto opt_dltensor = any.try_cast()) { + DLTensor* ptr = opt_dltensor.value(); + return ffi::Shape(ptr->shape, ptr->shape + ptr->ndim); + } else { + TVM_FFI_THROW(TypeError) + << "vm.builtin.shape_of expects a Tensor or DLTensor*, but get " + << any.GetTypeKey(); + } + }) .def("vm.builtin.copy", [](ffi::Any a) -> ffi::Any { return a; }) - .def( - "vm.builtin.reshape", - [](Tensor data, ffi::Shape new_shape) { return data.CreateView(new_shape, data->dtype); }) + .def("vm.builtin.reshape", + [](ffi::Any any, ffi::Shape new_shape) { + if (auto opt_tensor = any.try_cast()) { + Tensor data = opt_tensor.value(); + return data.CreateView(new_shape, data->dtype); + } else if (auto opt_dltensor = any.try_cast()) { + DLTensor* ptr = opt_dltensor.value(); + DLManagedTensor* tmp = new DLManagedTensor(); + tmp->dl_tensor = *ptr; + tmp->manager_ctx = NULL; + tmp->deleter = NULL; + Tensor data = Tensor::FromDLPack(tmp); + return data.CreateView(new_shape, data->dtype); + } else { + TVM_FFI_THROW(TypeError) + << "vm.builtin.reshape expects a Tensor or DLTensor*, but get " + << any.GetTypeKey(); + } + }) .def("vm.builtin.null_value", []() -> std::nullptr_t { return nullptr; }) .def_packed("vm.builtin.to_device", [](ffi::PackedArgs args, ffi::Any* rv) { Tensor data = args[0].cast(); From e1cb235ce6ea9fd41676444b4ca9354a59a5bf9f Mon Sep 17 00:00:00 2001 From: locnd182644 Date: Fri, 27 Feb 2026 14:41:44 +0700 Subject: [PATCH 2/5] Using std::make_unique and nullptr following Review --- src/runtime/vm/builtin.cc | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index 118ccff0b6b4..109fdc84d3c1 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -541,24 +541,24 @@ TVM_FFI_STATIC_INIT_BLOCK() { }) .def("vm.builtin.copy", [](ffi::Any a) -> ffi::Any { return a; }) .def("vm.builtin.reshape", - [](ffi::Any any, ffi::Shape new_shape) { - if (auto opt_tensor = any.try_cast()) { - Tensor data = opt_tensor.value(); - return data.CreateView(new_shape, data->dtype); - } else if (auto opt_dltensor = any.try_cast()) { - DLTensor* ptr = opt_dltensor.value(); - DLManagedTensor* tmp = new DLManagedTensor(); - tmp->dl_tensor = *ptr; - tmp->manager_ctx = NULL; - tmp->deleter = NULL; - Tensor data = Tensor::FromDLPack(tmp); - return data.CreateView(new_shape, data->dtype); - } else { - TVM_FFI_THROW(TypeError) - << "vm.builtin.reshape expects a Tensor or DLTensor*, but get " - << any.GetTypeKey(); - } - }) + [](ffi::Any any, ffi::Shape new_shape) { + if (auto opt_tensor = any.try_cast()) { + Tensor data = opt_tensor.value(); + return data.CreateView(new_shape, data->dtype); + } else if (auto opt_dltensor = any.try_cast()) { + DLTensor* ptr = opt_dltensor.value(); + auto tmp = std::make_unique(); + tmp->dl_tensor = *ptr; + tmp->manager_ctx = nullptr; + tmp->deleter = nullptr; + Tensor data = Tensor::FromDLPack(tmp.release()); + return data.CreateView(new_shape, data->dtype); + } else { + TVM_FFI_THROW(TypeError) + << "vm.builtin.reshape expects a Tensor or DLTensor*, but get " + << any.GetTypeKey(); + } + }) .def("vm.builtin.null_value", []() -> std::nullptr_t { return nullptr; }) .def_packed("vm.builtin.to_device", [](ffi::PackedArgs args, ffi::Any* rv) { Tensor data = args[0].cast(); From d446cf30f6542bc67a28e579dc775f9f70670d0d Mon Sep 17 00:00:00 2001 From: locnd182644 Date: Fri, 27 Feb 2026 15:24:09 +0700 Subject: [PATCH 3/5] Updated --- 3rdparty/cnpy | 1 - 3rdparty/dmlc-core | 1 - 3rdparty/rang | 1 - 3rdparty/zlib | 1 - src/runtime/vm/builtin.cc | 36 ++++++++++++++++++------------------ 5 files changed, 18 insertions(+), 22 deletions(-) delete mode 160000 3rdparty/cnpy delete mode 160000 3rdparty/dmlc-core delete mode 160000 3rdparty/rang delete mode 160000 3rdparty/zlib diff --git a/3rdparty/cnpy b/3rdparty/cnpy deleted file mode 160000 index 4e8810b1a863..000000000000 --- a/3rdparty/cnpy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4e8810b1a8637695171ed346ce68f6984e585ef4 diff --git a/3rdparty/dmlc-core b/3rdparty/dmlc-core deleted file mode 160000 index 3031e4a61a98..000000000000 --- a/3rdparty/dmlc-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3031e4a61a98f49f07a42cfdec6242340fb2fd8c diff --git a/3rdparty/rang b/3rdparty/rang deleted file mode 160000 index cabe04d6d6b0..000000000000 --- a/3rdparty/rang +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cabe04d6d6b05356fa8f9741704924788f0dd762 diff --git a/3rdparty/zlib b/3rdparty/zlib deleted file mode 160000 index ef24c4c75021..000000000000 --- a/3rdparty/zlib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ef24c4c7502169f016dcd2a26923dbaf3216748c diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index 109fdc84d3c1..2f1f89d2e559 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -541,24 +541,24 @@ TVM_FFI_STATIC_INIT_BLOCK() { }) .def("vm.builtin.copy", [](ffi::Any a) -> ffi::Any { return a; }) .def("vm.builtin.reshape", - [](ffi::Any any, ffi::Shape new_shape) { - if (auto opt_tensor = any.try_cast()) { - Tensor data = opt_tensor.value(); - return data.CreateView(new_shape, data->dtype); - } else if (auto opt_dltensor = any.try_cast()) { - DLTensor* ptr = opt_dltensor.value(); - auto tmp = std::make_unique(); - tmp->dl_tensor = *ptr; - tmp->manager_ctx = nullptr; - tmp->deleter = nullptr; - Tensor data = Tensor::FromDLPack(tmp.release()); - return data.CreateView(new_shape, data->dtype); - } else { - TVM_FFI_THROW(TypeError) - << "vm.builtin.reshape expects a Tensor or DLTensor*, but get " - << any.GetTypeKey(); - } - }) + [](ffi::Any any, ffi::Shape new_shape) { + if (auto opt_tensor = any.try_cast()) { + Tensor data = opt_tensor.value(); + return data.CreateView(new_shape, data->dtype); + } else if (auto opt_dltensor = any.try_cast()) { + DLTensor* ptr = opt_dltensor.value(); + auto tmp = std::make_unique(); + tmp->dl_tensor = *ptr; + tmp->manager_ctx = nullptr; + tmp->deleter = nullptr; + Tensor data = Tensor::FromDLPack(tmp.release()); + return data.CreateView(new_shape, data->dtype); + } else { + TVM_FFI_THROW(TypeError) + << "vm.builtin.reshape expects a Tensor or DLTensor*, but get " + << any.GetTypeKey(); + } + }) .def("vm.builtin.null_value", []() -> std::nullptr_t { return nullptr; }) .def_packed("vm.builtin.to_device", [](ffi::PackedArgs args, ffi::Any* rv) { Tensor data = args[0].cast(); From 857f1828f487b1135d0435956c1eb55cc9458e93 Mon Sep 17 00:00:00 2001 From: locnd182644 Date: Sat, 28 Feb 2026 08:32:09 +0700 Subject: [PATCH 4/5] rerun --- src/runtime/vm/builtin.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index 2f1f89d2e559..565f905c01bd 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -552,6 +552,7 @@ TVM_FFI_STATIC_INIT_BLOCK() { tmp->manager_ctx = nullptr; tmp->deleter = nullptr; Tensor data = Tensor::FromDLPack(tmp.release()); + return data.CreateView(new_shape, data->dtype); } else { TVM_FFI_THROW(TypeError) From 7c3e1f3b89890f5a2b0d694bb30049d215c4f7bc Mon Sep 17 00:00:00 2001 From: locnd182644 Date: Sat, 28 Feb 2026 08:32:24 +0700 Subject: [PATCH 5/5] rerun again --- src/runtime/vm/builtin.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index 565f905c01bd..2f1f89d2e559 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -552,7 +552,6 @@ TVM_FFI_STATIC_INIT_BLOCK() { tmp->manager_ctx = nullptr; tmp->deleter = nullptr; Tensor data = Tensor::FromDLPack(tmp.release()); - return data.CreateView(new_shape, data->dtype); } else { TVM_FFI_THROW(TypeError)