Przeglądaj źródła

Fix `typeid` size for 32-bit platforms

gingerBill 6 miesięcy temu
rodzic
commit
614c0dd740
2 zmienionych plików z 5 dodań i 3 usunięć
  1. 2 0
      base/runtime/core.odin
  2. 3 3
      src/types.cpp

+ 2 - 0
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,

+ 3 - 3
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;