This is an automated email from the ASF dual-hosted git repository.
tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm-ffi.git
The following commit(s) were added to refs/heads/main by this push:
new 5c213498 [CORE] Propagate static object type bounds in Any conversions
(#719)
5c213498 is described below
commit 5c213498a72e003657a0522f29a538f9c5a5d346
Author: Tianqi Chen <[email protected]>
AuthorDate: Sun Aug 30 14:28:27 2026 -0400
[CORE] Propagate static object type bounds in Any conversions (#719)
Add narrow static-object type-index assumptions to the non-null
`ObjectPtr`, `ObjectRef`, and raw-object conversion paths into `AnyView`
and `Any`.
Runtime validation for unconstrained incoming `Any` and `AnyView` values
remains unchanged.
Validation: all 471 enabled CTest entries passed. The GCC 11 debug build
required demoting only the pre-existing `-Werror=redundant-move` warning
in `include/tvm/ffi/container/array.h:867`.
---
include/tvm/ffi/object.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/tvm/ffi/object.h b/include/tvm/ffi/object.h
index 988a291a..7a4007f7 100644
--- a/include/tvm/ffi/object.h
+++ b/include/tvm/ffi/object.h
@@ -1436,6 +1436,7 @@ struct TypeTraits<ObjectPtr<TObject>,
}
TVMFFIObject* obj_ptr =
details::ObjectUnsafe::TVMFFIObjectPtrFromObjectPtr(src);
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;
@@ -1448,6 +1449,7 @@ struct TypeTraits<ObjectPtr<TObject>,
}
TVMFFIObject* obj_ptr =
details::ObjectUnsafe::MoveObjectPtrToTVMFFIObjectPtr(std::move(src));
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;
@@ -1543,6 +1545,7 @@ struct ObjectRefTypeTraitsBase : public TypeTraitsBase {
}
TVMFFIObject* obj_ptr =
details::ObjectUnsafe::TVMFFIObjectPtrFromObjectRef(src);
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;
@@ -1557,6 +1560,7 @@ struct ObjectRefTypeTraitsBase : public TypeTraitsBase {
}
TVMFFIObject* obj_ptr =
details::ObjectUnsafe::MoveObjectRefToTVMFFIObjectPtr(std::move(src));
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;
@@ -1660,6 +1664,7 @@ struct TypeTraits<TObject*,
std::enable_if_t<std::is_base_of_v<Object, TObject>>
TVM_FFI_INLINE static void CopyToAnyView(TObject* src, TVMFFIAny* result) {
TVMFFIObject* obj_ptr = details::ObjectUnsafe::GetHeader(src);
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;
@@ -1668,6 +1673,7 @@ struct TypeTraits<TObject*,
std::enable_if_t<std::is_base_of_v<Object, TObject>>
TVM_FFI_INLINE static void MoveToAny(TObject* src, TVMFFIAny* result) {
TVMFFIObject* obj_ptr = details::ObjectUnsafe::GetHeader(src);
result->type_index = obj_ptr->type_index;
+ TVM_FFI_UNSAFE_ASSUME(result->type_index >=
TypeIndex::kTVMFFIStaticObjectBegin);
result->zero_padding = 0;
TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
result->v_obj = obj_ptr;