From d0d2f18f37bb574ef0031ba62ba765f2a5adad0d Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Tue, 14 Oct 2025 11:29:40 -0700 Subject: [PATCH] Add unit tagging to CppOverloadSetId (#6212) No update to lldbinit.py because we don't currently have dumping/debugging support for CppOverloadSetId anyway. --- .../check/testdata/basics/raw_sem_ir/cpp_interop.carbon | 6 +++--- toolchain/sem_ir/file.cpp | 1 + toolchain/sem_ir/ids.cpp | 4 ++++ toolchain/sem_ir/ids.h | 2 ++ toolchain/sem_ir/inst_namer.h | 2 ++ 5 files changed, 12 insertions(+), 3 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 f9e50057f8d7..7eeecc8f769c 100644 --- a/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon +++ b/toolchain/check/testdata/basics/raw_sem_ir/cpp_interop.carbon @@ -135,9 +135,9 @@ fn G(x: Cpp.X) { // CHECK:STDOUT: inst60000022: {kind: CompleteTypeWitness, arg0: inst60000020, type: type(inst(WitnessType))} // CHECK:STDOUT: inst60000023: {kind: PointerType, arg0: inst60000020, type: type(TypeType)} // CHECK:STDOUT: inst60000024: {kind: NameRef, arg0: name0, arg1: inst60000010, type: type(inst(NamespaceType))} -// CHECK:STDOUT: inst60000025: {kind: CppOverloadSetType, arg0: cpp_overload_set0, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst60000026: {kind: CppOverloadSetValue, arg0: cpp_overload_set0, type: type(inst60000025)} -// CHECK:STDOUT: inst60000027: {kind: CppOverloadSetValue, arg0: cpp_overload_set0, type: type(inst60000025)} +// CHECK:STDOUT: inst60000025: {kind: CppOverloadSetType, arg0: cpp_overload_set60000000, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst60000026: {kind: CppOverloadSetValue, arg0: cpp_overload_set60000000, type: type(inst60000025)} +// CHECK:STDOUT: inst60000027: {kind: CppOverloadSetValue, arg0: cpp_overload_set60000000, type: type(inst60000025)} // CHECK:STDOUT: inst60000028: {kind: NameRef, arg0: name4, arg1: inst60000026, type: type(inst60000025)} // CHECK:STDOUT: inst60000029: {kind: FunctionDecl, arg0: function1, arg1: inst_block_empty, type: type(inst6000002A)} // CHECK:STDOUT: inst6000002A: {kind: FunctionType, arg0: function1, arg1: specific, type: type(TypeType)} diff --git a/toolchain/sem_ir/file.cpp b/toolchain/sem_ir/file.cpp index 04c7f5a90c7a..a2531b0a623a 100644 --- a/toolchain/sem_ir/file.cpp +++ b/toolchain/sem_ir/file.cpp @@ -35,6 +35,7 @@ File::File(const Parse::Tree* parse_tree, CheckIRId check_ir_id, : LibraryNameId::Default), value_stores_(&value_stores), filename_(std::move(filename)), + cpp_overload_sets_(IdTag(check_ir_id.index, 0)), classes_(IdTag(check_ir_id.index, 0)), associated_constants_(IdTag(check_ir_id.index, 0)), impls_(*this), diff --git a/toolchain/sem_ir/ids.cpp b/toolchain/sem_ir/ids.cpp index a4cb381ecc1e..1d08896eaf02 100644 --- a/toolchain/sem_ir/ids.cpp +++ b/toolchain/sem_ir/ids.cpp @@ -42,6 +42,10 @@ auto ConstantId::Print(llvm::raw_ostream& out, bool disambiguate) const } } +auto CppOverloadSetId::Print(llvm::raw_ostream& out) const -> void { + IdBase::PrintHex(out); +} + auto CheckIRId::Print(llvm::raw_ostream& out) const -> void { if (*this == Cpp) { out << Label << "(Cpp)"; diff --git a/toolchain/sem_ir/ids.h b/toolchain/sem_ir/ids.h index 401f02e4534a..7ca1595775a8 100644 --- a/toolchain/sem_ir/ids.h +++ b/toolchain/sem_ir/ids.h @@ -276,6 +276,8 @@ struct CppOverloadSetId : public IdBase { static constexpr llvm::StringLiteral Label = "cpp_overload_set"; using IdBase::IdBase; + + auto Print(llvm::raw_ostream& out) const -> void; }; // The ID of a function. diff --git a/toolchain/sem_ir/inst_namer.h b/toolchain/sem_ir/inst_namer.h index e8e06b8713df..cb8fd7fb7011 100644 --- a/toolchain/sem_ir/inst_namer.h +++ b/toolchain/sem_ir/inst_namer.h @@ -53,6 +53,8 @@ class InstNamer { auto index = id.index; if constexpr (std::is_same_v) { index = sem_ir_->classes().GetRawIndex(id); + } else if constexpr (std::is_same_v) { + index = sem_ir_->cpp_overload_sets().GetRawIndex(id); } else if constexpr (std::is_same_v) { index = sem_ir_->associated_constants().GetRawIndex(id); }