summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-generics-lowering-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-generics-lowering-context.cpp')
-rw-r--r--source/slang/slang-ir-generics-lowering-context.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/source/slang/slang-ir-generics-lowering-context.cpp b/source/slang/slang-ir-generics-lowering-context.cpp
index 0ed7d75d7..d0e1fabaf 100644
--- a/source/slang/slang-ir-generics-lowering-context.cpp
+++ b/source/slang/slang-ir-generics-lowering-context.cpp
@@ -374,12 +374,15 @@ namespace Slang
}
- bool SharedGenericsLoweringContext::doesTypeFitInAnyValue(IRType* concreteType, IRInterfaceType* interfaceType)
+ bool SharedGenericsLoweringContext::doesTypeFitInAnyValue(IRType* concreteType, IRInterfaceType* interfaceType, IRIntegerValue* outTypeSize, IRIntegerValue* outLimit)
{
auto anyValueSize = getInterfaceAnyValueSize(interfaceType, interfaceType->sourceLoc);
+ if (outLimit) *outLimit = anyValueSize;
IRSizeAndAlignment sizeAndAlignment;
Result result = getNaturalSizeAndAlignment(targetReq, concreteType, &sizeAndAlignment);
+ if (outTypeSize) *outTypeSize = sizeAndAlignment.size;
+
if(SLANG_FAILED(result) || (sizeAndAlignment.size > anyValueSize))
{
// The value does not fit, either because it is too large,