Browse Source

Add unit tagging to NameScopeId (#6258)

David Blaikie 6 months ago
parent
commit
3ea16b8313

+ 9 - 9
toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon

@@ -53,23 +53,23 @@ fn G(x: Cpp.X) {
 // CHECK:STDOUT:     clang_decl_id00000007: {key: "X * _Nonnull global", inst_id: inst6000004B}
 // CHECK:STDOUT:   name_scopes:
 // CHECK:STDOUT:     name_scope00000000: {inst: inst0000000E, parent_scope: name_scope<none>, has_error: false, extended_scopes: [], names: {name00000000: inst60000010, name00000001: inst6000001B}}
-// CHECK:STDOUT:     name_scope00000001: {inst: inst60000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000003: inst60000012, name00000004: inst60000029, name00000005: inst6000004B}}
-// CHECK:STDOUT:     name_scope00000002: {inst: inst60000012, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000001: {inst: inst60000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000003: inst60000012, name00000004: inst60000029, name00000005: inst6000004B}}
+// CHECK:STDOUT:     name_scope60000002: {inst: inst60000012, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
 // CHECK:STDOUT:   entity_names:
 // CHECK:STDOUT:     entity_name00000000: {name: name00000002, parent_scope: name_scope<none>, index: -1, is_template: 0}
 // CHECK:STDOUT:     entity_name00000001: {name: name00000002, parent_scope: name_scope<none>, index: -1, is_template: 0}
 // CHECK:STDOUT:     entity_name00000002: {name: name00000002, parent_scope: name_scope<none>, index: -1, is_template: 0}
-// CHECK:STDOUT:     entity_name00000003: {name: name00000005, parent_scope: name_scope00000001, index: -1, is_template: 0}
+// CHECK:STDOUT:     entity_name00000003: {name: name00000005, parent_scope: name_scope60000001, index: -1, is_template: 0}
 // CHECK:STDOUT:   cpp_global_vars:
 // CHECK:STDOUT:     cpp_global_var00000000: {key: {entity_name_id: entity_name00000003}, clang_decl_id: clang_decl_id00000007}
 // CHECK:STDOUT:   functions:
 // CHECK:STDOUT:     function60000000: {name: name00000001, parent_scope: name_scope00000000, call_params_id: inst_block00000006, body: [inst_block00000009]}
-// CHECK:STDOUT:     function60000001: {name: name00000004, parent_scope: name_scope00000001, call_params_id: inst_block_empty}
-// CHECK:STDOUT:     function60000002: {name: name00000007, parent_scope: name_scope00000001, call_params_id: inst_block_empty}
-// CHECK:STDOUT:     function60000003: {name: name00000004, parent_scope: name_scope00000001, call_params_id: inst_block0000000D}
-// CHECK:STDOUT:     function60000004: {name: name00000007, parent_scope: name_scope00000001, call_params_id: inst_block00000012}
+// CHECK:STDOUT:     function60000001: {name: name00000004, parent_scope: name_scope60000001, call_params_id: inst_block_empty}
+// CHECK:STDOUT:     function60000002: {name: name00000007, parent_scope: name_scope60000001, call_params_id: inst_block_empty}
+// CHECK:STDOUT:     function60000003: {name: name00000004, parent_scope: name_scope60000001, call_params_id: inst_block0000000D}
+// CHECK:STDOUT:     function60000004: {name: name00000007, parent_scope: name_scope60000001, call_params_id: inst_block00000012}
 // CHECK:STDOUT:   classes:
-// CHECK:STDOUT:     class60000000:   {name: name00000003, parent_scope: name_scope00000001, self_type_id: type(inst60000013), inheritance_kind: Base, is_dynamic: 0, scope_id: name_scope00000002, body_block_id: inst_block0000000A, adapt_id: inst<none>, base_id: inst<none>, complete_type_witness_id: inst60000024, vtable_decl_id: inst<none>}}
+// CHECK:STDOUT:     class60000000:   {name: name00000003, parent_scope: name_scope60000001, self_type_id: type(inst60000013), inheritance_kind: Base, is_dynamic: 0, scope_id: name_scope60000002, body_block_id: inst_block0000000A, adapt_id: inst<none>, base_id: inst<none>, complete_type_witness_id: inst60000024, vtable_decl_id: inst<none>}}
 // CHECK:STDOUT:   generics:        {}
 // CHECK:STDOUT:   specifics:       {}
 // CHECK:STDOUT:   struct_type_fields:
@@ -126,7 +126,7 @@ fn G(x: Cpp.X) {
 // CHECK:STDOUT:     'inst(WitnessType)': {kind: WitnessType, type: type(TypeType)}
 // CHECK:STDOUT:     inst0000000E:    {kind: Namespace, arg0: name_scope00000000, arg1: inst<none>, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst6000000F:    {kind: ImportCppDecl}
-// CHECK:STDOUT:     inst60000010:    {kind: Namespace, arg0: name_scope00000001, arg1: inst6000000F, type: type(inst(NamespaceType))}
+// CHECK:STDOUT:     inst60000010:    {kind: Namespace, arg0: name_scope60000001, arg1: inst6000000F, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst60000011:    {kind: NameRef, arg0: name00000000, arg1: inst60000010, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst60000012:    {kind: ClassDecl, arg0: class60000000, arg1: inst_block<none>, type: type(TypeType)}
 // CHECK:STDOUT:     inst60000013:    {kind: ClassType, arg0: class60000000, arg1: specific<none>, type: type(TypeType)}

+ 4 - 4
toolchain/check/testdata/basics/raw_sem_ir/multifile.carbon

@@ -98,13 +98,13 @@ fn B() {
 // CHECK:STDOUT:   clang_decls:     {}
 // CHECK:STDOUT:   name_scopes:
 // CHECK:STDOUT:     name_scope00000000: {inst: inst0000000E, parent_scope: name_scope<none>, has_error: false, extended_scopes: [], names: {name00000001: inst50000010, name00000000: inst50000011}}
-// CHECK:STDOUT:     name_scope00000001: {inst: inst50000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000001: inst50000016}}
+// CHECK:STDOUT:     name_scope50000001: {inst: inst50000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000001: inst50000016}}
 // CHECK:STDOUT:   entity_names:
-// CHECK:STDOUT:     entity_name00000000: {name: name00000001, parent_scope: name_scope00000001, index: -1, is_template: 0}
+// CHECK:STDOUT:     entity_name00000000: {name: name00000001, parent_scope: name_scope50000001, index: -1, is_template: 0}
 // CHECK:STDOUT:   cpp_global_vars: {}
 // CHECK:STDOUT:   functions:
 // CHECK:STDOUT:     function50000000: {name: name00000000, parent_scope: name_scope00000000, call_params_id: inst_block_empty, body: [inst_block00000005]}
-// CHECK:STDOUT:     function50000001: {name: name00000001, parent_scope: name_scope00000001}
+// CHECK:STDOUT:     function50000001: {name: name00000001, parent_scope: name_scope50000001}
 // CHECK:STDOUT:   classes:         {}
 // CHECK:STDOUT:   generics:        {}
 // CHECK:STDOUT:   specifics:       {}
@@ -124,7 +124,7 @@ fn B() {
 // CHECK:STDOUT:   insts:
 // CHECK:STDOUT:     inst0000000E:    {kind: Namespace, arg0: name_scope00000000, arg1: inst<none>, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst5000000F:    {kind: ImportDecl, arg0: name00000001}
-// CHECK:STDOUT:     inst50000010:    {kind: Namespace, arg0: name_scope00000001, arg1: inst5000000F, type: type(inst(NamespaceType))}
+// CHECK:STDOUT:     inst50000010:    {kind: Namespace, arg0: name_scope50000001, arg1: inst5000000F, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst50000011:    {kind: FunctionDecl, arg0: function50000000, arg1: inst_block_empty, type: type(inst50000012)}
 // CHECK:STDOUT:     inst50000012:    {kind: FunctionType, arg0: function50000000, arg1: specific<none>, type: type(TypeType)}
 // CHECK:STDOUT:     inst50000013:    {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)}

+ 4 - 4
toolchain/check/testdata/basics/raw_sem_ir/multifile_with_textual_ir.carbon

@@ -117,13 +117,13 @@ fn B() {
 // CHECK:STDOUT:   clang_decls:     {}
 // CHECK:STDOUT:   name_scopes:
 // CHECK:STDOUT:     name_scope00000000: {inst: inst0000000E, parent_scope: name_scope<none>, has_error: false, extended_scopes: [], names: {name00000001: inst50000010, name00000000: inst50000011}}
-// CHECK:STDOUT:     name_scope00000001: {inst: inst50000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000001: inst50000016}}
+// CHECK:STDOUT:     name_scope50000001: {inst: inst50000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000001: inst50000016}}
 // CHECK:STDOUT:   entity_names:
-// CHECK:STDOUT:     entity_name00000000: {name: name00000001, parent_scope: name_scope00000001, index: -1, is_template: 0}
+// CHECK:STDOUT:     entity_name00000000: {name: name00000001, parent_scope: name_scope50000001, index: -1, is_template: 0}
 // CHECK:STDOUT:   cpp_global_vars: {}
 // CHECK:STDOUT:   functions:
 // CHECK:STDOUT:     function50000000: {name: name00000000, parent_scope: name_scope00000000, call_params_id: inst_block_empty, body: [inst_block00000005]}
-// CHECK:STDOUT:     function50000001: {name: name00000001, parent_scope: name_scope00000001}
+// CHECK:STDOUT:     function50000001: {name: name00000001, parent_scope: name_scope50000001}
 // CHECK:STDOUT:   classes:         {}
 // CHECK:STDOUT:   generics:        {}
 // CHECK:STDOUT:   specifics:       {}
@@ -143,7 +143,7 @@ fn B() {
 // CHECK:STDOUT:   insts:
 // CHECK:STDOUT:     inst0000000E:    {kind: Namespace, arg0: name_scope00000000, arg1: inst<none>, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst5000000F:    {kind: ImportDecl, arg0: name00000001}
-// CHECK:STDOUT:     inst50000010:    {kind: Namespace, arg0: name_scope00000001, arg1: inst5000000F, type: type(inst(NamespaceType))}
+// CHECK:STDOUT:     inst50000010:    {kind: Namespace, arg0: name_scope50000001, arg1: inst5000000F, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst50000011:    {kind: FunctionDecl, arg0: function50000000, arg1: inst_block_empty, type: type(inst50000012)}
 // CHECK:STDOUT:     inst50000012:    {kind: FunctionType, arg0: function50000000, arg1: specific<none>, type: type(TypeType)}
 // CHECK:STDOUT:     inst50000013:    {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)}

+ 20 - 20
toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon

@@ -219,25 +219,25 @@ fn Foo[T:! type](p: T*) -> (T*, ()) {
 // CHECK:STDOUT:   clang_decls:     {}
 // CHECK:STDOUT:   name_scopes:
 // CHECK:STDOUT:     name_scope00000000: {inst: inst0000000E, parent_scope: name_scope<none>, has_error: false, extended_scopes: [], names: {name(Core): inst60000010, name00000000: inst60000035}}
-// CHECK:STDOUT:     name_scope00000001: {inst: inst60000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000003: inst60000045}}
-// CHECK:STDOUT:     name_scope00000002: {inst: inst60000046, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst60000049, name00000004: inst6000004A}}
-// CHECK:STDOUT:     name_scope00000003: {inst: inst6000005E, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000004: {inst: inst6000008B, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000005: {inst: inst6000008F, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000006: {inst: inst60000093, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000007: {inst: inst60000097, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000008: {inst: inst6000009B, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope00000009: {inst: inst600000B5, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope0000000A: {inst: inst600000B9, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope0000000B: {inst: inst600000BD, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
-// CHECK:STDOUT:     name_scope0000000C: {inst: inst600000F5, parent_scope: name_scope00000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000001: {inst: inst60000010, parent_scope: name_scope00000000, has_error: false, extended_scopes: [], names: {name00000003: inst60000045}}
+// CHECK:STDOUT:     name_scope60000002: {inst: inst60000046, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {name(SelfType): inst60000049, name00000004: inst6000004A}}
+// CHECK:STDOUT:     name_scope60000003: {inst: inst6000005E, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000004: {inst: inst6000008B, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000005: {inst: inst6000008F, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000006: {inst: inst60000093, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000007: {inst: inst60000097, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000008: {inst: inst6000009B, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope60000009: {inst: inst600000B5, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope6000000A: {inst: inst600000B9, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope6000000B: {inst: inst600000BD, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
+// CHECK:STDOUT:     name_scope6000000C: {inst: inst600000F5, parent_scope: name_scope60000001, has_error: false, extended_scopes: [], names: {}}
 // CHECK:STDOUT:   entity_names:
 // CHECK:STDOUT:     entity_name00000000: {name: name(PeriodSelf), parent_scope: name_scope<none>, index: -1, is_template: 0}
 // CHECK:STDOUT:     entity_name00000001: {name: name00000001, parent_scope: name_scope<none>, index: 0, is_template: 0}
 // CHECK:STDOUT:     entity_name00000002: {name: name00000002, parent_scope: name_scope<none>, index: -1, is_template: 0}
-// CHECK:STDOUT:     entity_name00000003: {name: name00000003, parent_scope: name_scope00000001, index: -1, is_template: 0}
+// CHECK:STDOUT:     entity_name00000003: {name: name00000003, parent_scope: name_scope60000001, index: -1, is_template: 0}
 // CHECK:STDOUT:     entity_name00000004: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0}
-// CHECK:STDOUT:     entity_name00000005: {name: name00000004, parent_scope: name_scope00000002, index: -1, is_template: 0}
+// CHECK:STDOUT:     entity_name00000005: {name: name00000004, parent_scope: name_scope60000002, index: -1, is_template: 0}
 // CHECK:STDOUT:     entity_name00000006: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0}
 // CHECK:STDOUT:     entity_name00000007: {name: name(SelfType), parent_scope: name_scope<none>, index: 0, is_template: 0}
 // CHECK:STDOUT:     entity_name00000008: {name: name(SelfValue), parent_scope: name_scope<none>, index: -1, is_template: 0}
@@ -297,11 +297,11 @@ fn Foo[T:! type](p: T*) -> (T*, ()) {
 // CHECK:STDOUT:   cpp_global_vars: {}
 // CHECK:STDOUT:   functions:
 // CHECK:STDOUT:     function60000000: {name: name00000000, parent_scope: name_scope00000000, call_params_id: inst_block0000000D, return_slot_pattern: inst60000030, body: [inst_block00000014]}
-// CHECK:STDOUT:     function60000001: {name: name00000004, parent_scope: name_scope00000002, return_slot_pattern: inst60000055}
-// CHECK:STDOUT:     function60000002: {name: name00000004, parent_scope: name_scope00000003, return_slot_pattern: inst60000073}
-// CHECK:STDOUT:     function60000003: {name: name00000004, parent_scope: name_scope00000008, return_slot_pattern: inst600000AA}
-// CHECK:STDOUT:     function60000004: {name: name00000004, parent_scope: name_scope0000000B, return_slot_pattern: inst600000D5}
-// CHECK:STDOUT:     function60000005: {name: name00000004, parent_scope: name_scope0000000C, return_slot_pattern: inst60000111}
+// CHECK:STDOUT:     function60000001: {name: name00000004, parent_scope: name_scope60000002, return_slot_pattern: inst60000055}
+// CHECK:STDOUT:     function60000002: {name: name00000004, parent_scope: name_scope60000003, return_slot_pattern: inst60000073}
+// CHECK:STDOUT:     function60000003: {name: name00000004, parent_scope: name_scope60000008, return_slot_pattern: inst600000AA}
+// CHECK:STDOUT:     function60000004: {name: name00000004, parent_scope: name_scope6000000B, return_slot_pattern: inst600000D5}
+// CHECK:STDOUT:     function60000005: {name: name00000004, parent_scope: name_scope6000000C, return_slot_pattern: inst60000111}
 // CHECK:STDOUT:   classes:         {}
 // CHECK:STDOUT:   generics:
 // CHECK:STDOUT:     generic60000000: {decl: inst60000035, bindings: inst_block00000010}
@@ -382,7 +382,7 @@ fn Foo[T:! type](p: T*) -> (T*, ()) {
 // CHECK:STDOUT:   insts:
 // CHECK:STDOUT:     inst0000000E:    {kind: Namespace, arg0: name_scope00000000, arg1: inst<none>, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst6000000F:    {kind: ImportDecl, arg0: name(Core)}
-// CHECK:STDOUT:     inst60000010:    {kind: Namespace, arg0: name_scope00000001, arg1: inst6000000F, type: type(inst(NamespaceType))}
+// CHECK:STDOUT:     inst60000010:    {kind: Namespace, arg0: name_scope60000001, arg1: inst6000000F, type: type(inst(NamespaceType))}
 // CHECK:STDOUT:     inst60000011:    {kind: FacetType, arg0: facet_type00000000, type: type(TypeType)}
 // CHECK:STDOUT:     inst60000012:    {kind: BindSymbolicName, arg0: entity_name00000000, arg1: inst<none>, type: type(inst60000011)}
 // CHECK:STDOUT:     inst60000013:    {kind: BindSymbolicName, arg0: entity_name00000000, arg1: inst<none>, type: type(inst60000011)}

+ 5 - 0
toolchain/sem_ir/name_scope.cpp

@@ -11,6 +11,11 @@
 
 namespace Carbon::SemIR {
 
+NameScopeStore::NameScopeStore(const File* file)
+    // 1 reserved untagged id because the Package NameScope is used across
+    // Files.
+    : file_(file), values_(IdTag(file->check_ir_id().index, 1)) {}
+
 auto NameScope::Print(llvm::raw_ostream& out) const -> void {
   out << "{inst: " << inst_id_ << ", parent_scope: " << parent_scope_id_
       << ", has_error: " << (has_error_ ? "true" : "false");

+ 1 - 1
toolchain/sem_ir/name_scope.h

@@ -312,7 +312,7 @@ class NameScope : public Printable<NameScope> {
 // Provides a ValueStore wrapper for an API specific to name scopes.
 class NameScopeStore {
  public:
-  explicit NameScopeStore(const File* file) : file_(file) {}
+  explicit NameScopeStore(const File* file);
 
   // Adds a name scope, returning an ID to reference it.
   auto Add(InstId inst_id, NameId name_id, NameScopeId parent_scope_id)