From e5b796db188416dfc414dab27b92c86b0b53de2b Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 10 Sep 2020 15:10:11 -0700 Subject: Allow existential types in `StructuredBuffer` element type. (#1536) * Allow existential types in `StructuredBuffer` element type. * Handle StructuredBuffer.Load/.Consume methods * Clean up unnecessary changes * Code cleanup * Update test comment --- source/slang/slang-ir-lower-generic-function.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'source/slang/slang-ir-lower-generic-function.cpp') diff --git a/source/slang/slang-ir-lower-generic-function.cpp b/source/slang/slang-ir-lower-generic-function.cpp index c02e9e3d6..f5bd469ac 100644 --- a/source/slang/slang-ir-lower-generic-function.cpp +++ b/source/slang/slang-ir-lower-generic-function.cpp @@ -201,8 +201,15 @@ namespace Slang void lowerWitnessTable(IRWitnessTable* witnessTable) { auto interfaceType = maybeLowerInterfaceType(cast(witnessTable->getConformanceType())); + IRBuilder builderStorage; + auto builder = &builderStorage; + builder->sharedBuilder = &sharedContext->sharedBuilderStorage; + builder->setInsertBefore(witnessTable); if (interfaceType != witnessTable->getConformanceType()) - witnessTable->setConformanceType(interfaceType); + { + auto newWitnessTableType = builder->getWitnessTableType(interfaceType); + witnessTable->setFullType(newWitnessTableType); + } if (isBuiltin(interfaceType)) return; for (auto child : witnessTable->getChildren()) @@ -223,10 +230,6 @@ namespace Slang { // Translate a Type value to an RTTI object pointer. auto rttiObject = sharedContext->maybeEmitRTTIObject(entry->getSatisfyingVal()); - IRBuilder builderStorage; - auto builder = &builderStorage; - builder->sharedBuilder = &sharedContext->sharedBuilderStorage; - builder->setInsertBefore(witnessTable); auto rttiObjectPtr = builder->emitGetAddress( builder->getPtrType(builder->getRTTIType()), rttiObject); -- cgit v1.2.3