From fa9a07b6ccac6934fba6694d5ac9bf8dfe5d3d0d Mon Sep 17 00:00:00 2001 From: josh11b <15258583+josh11b@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:10:21 -0800 Subject: [PATCH] Add `Make...Id` functions for debugging (#4759) In practice, I am unable to call constructors like `SemIR::InstId` from a debugger. I first tried to use https://clang.llvm.org/docs/AttributeReference.html#noinline to make some non-inline calls to the constructor, but that didn't work: ``` toolchain/sem_ir/dump.cpp:245:23: error: 'noinline' attribute is ignored because there exists no call expression inside the statement [-Werror,-Wignored-attributes] 245 | [[clang::noinline]] return InstId(inst); | ``` Co-authored-by: Josh L --- toolchain/sem_ir/dump.cpp | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/toolchain/sem_ir/dump.cpp b/toolchain/sem_ir/dump.cpp index c8434ab2b16f..8f3941735891 100644 --- a/toolchain/sem_ir/dump.cpp +++ b/toolchain/sem_ir/dump.cpp @@ -238,6 +238,50 @@ LLVM_DUMP_METHOD auto Dump(const File& file, TypeId type_id) -> void { llvm::errs() << '\n'; } +// Functions that can be used instead of the corresponding constructor, which is +// unavailable during debugging. +LLVM_DUMP_METHOD static auto MakeClassId(int id) -> ClassId { + return ClassId(id); +} +LLVM_DUMP_METHOD static auto MakeConstantId(int id) -> ConstantId { + return ConstantId(id); +} +LLVM_DUMP_METHOD static auto MakeEntityNameId(int id) -> EntityNameId { + return EntityNameId(id); +} +LLVM_DUMP_METHOD static auto MakeFacetTypeId(int id) -> FacetTypeId { + return FacetTypeId(id); +} +LLVM_DUMP_METHOD static auto MakeFunctionId(int id) -> FunctionId { + return FunctionId(id); +} +LLVM_DUMP_METHOD static auto MakeGenericId(int id) -> GenericId { + return GenericId(id); +} +LLVM_DUMP_METHOD static auto MakeImplId(int id) -> ImplId { return ImplId(id); } +LLVM_DUMP_METHOD static auto MakeInstBlockId(int id) -> InstBlockId { + return InstBlockId(id); +} +LLVM_DUMP_METHOD static auto MakeInstId(int id) -> InstId { return InstId(id); } +LLVM_DUMP_METHOD static auto MakeInterfaceId(int id) -> InterfaceId { + return InterfaceId(id); +} +LLVM_DUMP_METHOD static auto MakeNameId(int id) -> NameId { return NameId(id); } +LLVM_DUMP_METHOD static auto MakeNameScopeId(int id) -> NameScopeId { + return NameScopeId(id); +} +LLVM_DUMP_METHOD static auto MakeSpecificId(int id) -> SpecificId { + return SpecificId(id); +} +LLVM_DUMP_METHOD static auto MakeStructTypeFieldsId(int id) + -> StructTypeFieldsId { + return StructTypeFieldsId(id); +} +LLVM_DUMP_METHOD static auto MakeTypeBlockId(int id) -> TypeBlockId { + return TypeBlockId(id); +} +LLVM_DUMP_METHOD static auto MakeTypeId(int id) -> TypeId { return TypeId(id); } + } // namespace Carbon::SemIR #endif // NDEBUG