From 79541ee50cd3bfba50ba9c12a01def79a78e0921 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Wed, 22 Oct 2025 15:22:53 -0700 Subject: [PATCH] Add unit tagging to StructTypeFieldId (#6260) Based on #6259 --- .../check/testdata/basics/raw_sem_ir/cpp_interop.carbon | 8 ++++---- toolchain/sem_ir/file.cpp | 4 +++- toolchain/sem_ir/file.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon b/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon index d807c951f746..f0a1a56e2345 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon @@ -74,9 +74,9 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: specifics: {} // CHECK:STDOUT: struct_type_fields: // CHECK:STDOUT: struct_type_fields00000000: {} -// CHECK:STDOUT: struct_type_fields00000001: +// CHECK:STDOUT: struct_type_fields60000001: // CHECK:STDOUT: 0: {name_id: name00000006, type_inst_id: inst6000001F} -// CHECK:STDOUT: struct_type_fields00000002: +// CHECK:STDOUT: struct_type_fields60000002: // CHECK:STDOUT: 0: {name_id: name00000006, type_inst_id: inst6000001F} // CHECK:STDOUT: types: // CHECK:STDOUT: 'type(TypeType)': @@ -144,8 +144,8 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: inst6000001F: {kind: PointerType, arg0: inst60000013, type: type(TypeType)} // CHECK:STDOUT: inst60000020: {kind: UnboundElementType, arg0: inst60000013, arg1: inst6000001F, type: type(TypeType)} // CHECK:STDOUT: inst60000021: {kind: FieldDecl, arg0: name00000006, arg1: element0, type: type(inst60000020)} -// CHECK:STDOUT: inst60000022: {kind: CustomLayoutType, arg0: struct_type_fields00000001, arg1: custom_layout00000001, type: type(TypeType)} -// CHECK:STDOUT: inst60000023: {kind: CustomLayoutType, arg0: struct_type_fields00000002, arg1: custom_layout00000001, type: type(TypeType)} +// CHECK:STDOUT: inst60000022: {kind: CustomLayoutType, arg0: struct_type_fields60000001, arg1: custom_layout00000001, type: type(TypeType)} +// CHECK:STDOUT: inst60000023: {kind: CustomLayoutType, arg0: struct_type_fields60000002, arg1: custom_layout00000001, type: type(TypeType)} // CHECK:STDOUT: inst60000024: {kind: CompleteTypeWitness, arg0: inst60000022, type: type(inst(WitnessType))} // CHECK:STDOUT: inst60000025: {kind: CompleteTypeWitness, arg0: inst60000023, type: type(inst(WitnessType))} // CHECK:STDOUT: inst60000026: {kind: PointerType, arg0: inst60000023, type: type(TypeType)} diff --git a/toolchain/sem_ir/file.cpp b/toolchain/sem_ir/file.cpp index dff651a95b0c..d0fb0a9b9e76 100644 --- a/toolchain/sem_ir/file.cpp +++ b/toolchain/sem_ir/file.cpp @@ -55,7 +55,9 @@ File::File(const Parse::Tree* parse_tree, CheckIRId check_ir_id, vtables_(check_ir_id), constant_values_(ConstantId::NotConstant, &insts_), inst_blocks_(allocator_, check_ir_id), - constants_(this) { + constants_(this), + // 1 reserved id for `StructTypeFields::Empty`. + struct_type_fields_(allocator_, IdTag(check_ir_id.index, 1)) { // `type` and the error type are both complete & concrete types. types_.SetComplete( TypeType::TypeId, diff --git a/toolchain/sem_ir/file.h b/toolchain/sem_ir/file.h index 137fe3c2c011..dbb83a16bf9f 100644 --- a/toolchain/sem_ir/file.h +++ b/toolchain/sem_ir/file.h @@ -403,7 +403,7 @@ class File : public Printable { ConstantStore constants_; // Storage for StructTypeField lists. - StructTypeFieldsStore struct_type_fields_ = StructTypeFieldsStore(allocator_); + StructTypeFieldsStore struct_type_fields_; // Storage for custom layouts. CustomLayoutStore custom_layouts_ = CustomLayoutStore(allocator_);