diff options
Diffstat (limited to 'source/slang/slang-ir-lower-generic-function.cpp')
| -rw-r--r-- | source/slang/slang-ir-lower-generic-function.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
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<IRInterfaceType>(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); |
