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;

Reply via email to