summaryrefslogtreecommitdiff
path: root/source/slang/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/ir.cpp')
-rw-r--r--source/slang/ir.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/slang/ir.cpp b/source/slang/ir.cpp
index 7318bff4c..1d3c91979 100644
--- a/source/slang/ir.cpp
+++ b/source/slang/ir.cpp
@@ -4862,6 +4862,20 @@ namespace Slang
auto interfaceDeclRef = ((IRDeclRef*)lookupInst->interfaceType.usedValue)->declRef;
auto mangledName = getMangledNameForConformanceWitness(srcDeclRef, interfaceDeclRef);
witnessTables.TryGetValue(mangledName, witnessTable);
+
+ if (!witnessTable)
+ {
+ // try specialize the witness table
+ auto genDeclRef = srcDeclRef;
+ genDeclRef.substitutions = createDefaultSubstitutions(module->session, genDeclRef.decl);
+ auto genName = getMangledNameForConformanceWitness(genDeclRef, interfaceDeclRef);
+ IRWitnessTable* genTable = nullptr;
+ if (witnessTables.TryGetValue(genName, genTable))
+ {
+ witnessTable = specializeWitnessTable(sharedContext, genTable, srcDeclRef, nullptr);
+ witnessTables.AddIfNotExists(witnessTable->mangledName, witnessTable);
+ }
+ }
if (witnessTable)
{
lookupInst->replaceUsesWith(witnessTable);