From bfc45bfb754e6298061ed9fbf5d74125c3cce9af Mon Sep 17 00:00:00 2001 From: "Borzyszkowski, Mateusz" Date: Tue, 17 Dec 2024 13:14:20 +0100 Subject: [PATCH] [Backport to 16][DebugInfo] Fix EnumClass support (#2876) This commit addresses issues with EnumClass handling in DebugEnumType. In reverse translation, a bug caused the EnumClass flag to be incorrectly applied to every DebugEnumType with an UnderlyingType. Additionally, in forward translation, the support for EnumClassFlag was missing entirely. --- lib/SPIRV/LLVMToSPIRVDbgTran.cpp | 2 ++ lib/SPIRV/SPIRVToLLVMDbgTran.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/SPIRV/LLVMToSPIRVDbgTran.cpp b/lib/SPIRV/LLVMToSPIRVDbgTran.cpp index 0450bae482..0b9fcae917 100644 --- a/lib/SPIRV/LLVMToSPIRVDbgTran.cpp +++ b/lib/SPIRV/LLVMToSPIRVDbgTran.cpp @@ -471,6 +471,8 @@ SPIRVWord mapDebugFlags(DINode::DIFlags DFlags) { Flags |= SPIRVDebug::FlagTypePassByValue; if (DFlags & DINode::FlagTypePassByReference) Flags |= SPIRVDebug::FlagTypePassByReference; + if (DFlags & DINode::FlagEnumClass) + Flags |= SPIRVDebug::FlagIsEnumClass; return Flags; } diff --git a/lib/SPIRV/SPIRVToLLVMDbgTran.cpp b/lib/SPIRV/SPIRVToLLVMDbgTran.cpp index be819ece9e..c17b4c1d12 100644 --- a/lib/SPIRV/SPIRVToLLVMDbgTran.cpp +++ b/lib/SPIRV/SPIRVToLLVMDbgTran.cpp @@ -671,7 +671,7 @@ DINode *SPIRVToLLVMDbgTran::transTypeEnum(const SPIRVExtInst *DebugInst) { UnderlyingType = transDebugInst(static_cast(E)); return getDIBuilder(DebugInst).createEnumerationType( Scope, Name, File, LineNo, SizeInBits, AlignInBits, Enumerators, - UnderlyingType, "", UnderlyingType); + UnderlyingType, "", Flags & SPIRVDebug::FlagIsEnumClass); } }