diff options
| author | Yong He <yonghe@outlook.com> | 2020-09-10 15:10:11 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-10 15:10:11 -0700 |
| commit | e5b796db188416dfc414dab27b92c86b0b53de2b (patch) | |
| tree | eab72001c550d80927805bd5462fb529c20170ae /source/slang/slang-ir-lower-generic-function.cpp | |
| parent | d6a2d2905125715629fe8972a374136189d0c9ef (diff) | |
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
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); |
