From 614c0dd7401271f7ddad5eaeb4de234021fe387c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 20 Feb 2025 17:09:28 +0000 Subject: [PATCH] Fix `typeid` size for 32-bit platforms --- base/runtime/core.odin | 2 ++ src/types.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/base/runtime/core.odin b/base/runtime/core.odin index 285883c2bb0..db5e4d698ad 100644 --- a/base/runtime/core.odin +++ b/base/runtime/core.odin @@ -442,10 +442,12 @@ Raw_Any :: struct { data: rawptr, id: typeid, } +#assert(size_of(Raw_Any) == size_of(any)) Raw_Cstring :: struct { data: [^]byte, } +#assert(size_of(Raw_Cstring) == size_of(cstring)) Raw_Soa_Pointer :: struct { data: rawptr, diff --git a/src/types.cpp b/src/types.cpp index fedb85230cf..056737af567 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3701,7 +3701,7 @@ gb_internal i64 type_size_of(Type *t) { case Basic_string: size = 2*build_context.int_size; break; case Basic_cstring: size = build_context.ptr_size; break; case Basic_any: size = 16; break; - case Basic_typeid: size = build_context.ptr_size; break; + case Basic_typeid: size = 8; break; case Basic_int: case Basic_uint: size = build_context.int_size; @@ -3764,7 +3764,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { case Basic_string: return build_context.int_size; case Basic_cstring: return build_context.ptr_size; case Basic_any: return 8; - case Basic_typeid: return build_context.ptr_size; + case Basic_typeid: return 8; case Basic_int: case Basic_uint: return build_context.int_size; @@ -4015,7 +4015,7 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { case Basic_string: return 2*build_context.int_size; case Basic_cstring: return build_context.ptr_size; case Basic_any: return 16; - case Basic_typeid: return build_context.ptr_size; + case Basic_typeid: return 8; case Basic_int: case Basic_uint: return build_context.int_size;