summaryrefslogtreecommitdiff
path: root/source/slang/ir-legalize-types.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/ir-legalize-types.cpp')
-rw-r--r--source/slang/ir-legalize-types.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/source/slang/ir-legalize-types.cpp b/source/slang/ir-legalize-types.cpp
index 9234af8f5..4e3bafd31 100644
--- a/source/slang/ir-legalize-types.cpp
+++ b/source/slang/ir-legalize-types.cpp
@@ -13,6 +13,7 @@
#include "ir.h"
#include "ir-insts.h"
#include "legalize-types.h"
+#include "mangle.h"
namespace Slang
{
@@ -277,7 +278,7 @@ static LegalVal legalizeLoad(
for (auto ee : legalPtrVal.getTuple()->elements)
{
TuplePseudoVal::Element element;
- element.fieldDeclRef = ee.fieldDeclRef;
+ element.mangledName = ee.mangledName;
element.val = legalizeLoad(context, ee.val);
tupleVal->elements.Add(element);
@@ -366,11 +367,13 @@ static LegalVal legalizeFieldAddress(
case LegalVal::Flavor::pair:
{
+ String mangledFieldName = getMangledName(fieldDeclRef.getDecl());
+
// There are two sides, the ordinary and the special,
// and we basically just dispatch to both of them.
auto pairVal = legalPtrOperand.getPair();
auto pairInfo = pairVal->pairInfo;
- auto pairElement = pairInfo->findElement(fieldDeclRef);
+ auto pairElement = pairInfo->findElement(mangledFieldName);
if (!pairElement)
{
SLANG_UNEXPECTED("didn't find tuple element");
@@ -424,6 +427,8 @@ static LegalVal legalizeFieldAddress(
case LegalVal::Flavor::tuple:
{
+ String mangledFieldName = getMangledName(fieldDeclRef.getDecl());
+
// The operand is a tuple of pointer-like
// values, we want to extract the element
// corresponding to a field. We will handle
@@ -432,7 +437,7 @@ static LegalVal legalizeFieldAddress(
auto ptrTupleInfo = legalPtrOperand.getTuple();
for (auto ee : ptrTupleInfo->elements)
{
- if (ee.fieldDeclRef.Equals(fieldDeclRef))
+ if (ee.mangledName == mangledFieldName)
{
return ee.val;
}
@@ -542,7 +547,7 @@ static LegalVal legalizeGetElementPtr(
auto elemType = tupleType->elements[ee].type;
TuplePseudoVal::Element resElem;
- resElem.fieldDeclRef = ptrElem.fieldDeclRef;
+ resElem.mangledName = ptrElem.mangledName;
resElem.val = legalizeGetElementPtr(
context,
elemType,
@@ -1001,7 +1006,7 @@ static LegalVal declareVars(
for (auto ee : tupleType->elements)
{
- auto fieldLayout = getFieldLayout(typeLayout, ee.fieldDeclRef);
+ auto fieldLayout = getFieldLayout(typeLayout, ee.mangledName);
RefPtr<TypeLayout> fieldTypeLayout = fieldLayout ? fieldLayout->typeLayout : nullptr;
// If we are processing layout information, then
@@ -1026,7 +1031,7 @@ static LegalVal declareVars(
globalNameInfo);
TuplePseudoVal::Element element;
- element.fieldDeclRef = ee.fieldDeclRef;
+ element.mangledName = ee.mangledName;
element.val = fieldVal;
tupleVal->elements.Add(element);
}