summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-lower-generic-function.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-04-16 10:34:26 -0700
committerGitHub <noreply@github.com>2021-04-16 10:34:26 -0700
commit79e92395f8ce3d92c446e3bb3250d19ce33decd5 (patch)
tree2ac277fa299200da72cf03a2b5b96338f66aee5d /source/slang/slang-ir-lower-generic-function.cpp
parentbad484d838590d0a2aaf1b5b8ac820634af2decb (diff)
Update `model-viewer` example and fixing compiler bugs. (#1795)
Diffstat (limited to 'source/slang/slang-ir-lower-generic-function.cpp')
-rw-r--r--source/slang/slang-ir-lower-generic-function.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/source/slang/slang-ir-lower-generic-function.cpp b/source/slang/slang-ir-lower-generic-function.cpp
index 6e9754744..8cd292e49 100644
--- a/source/slang/slang-ir-lower-generic-function.cpp
+++ b/source/slang/slang-ir-lower-generic-function.cpp
@@ -26,6 +26,7 @@ namespace Slang
return genericValue;
auto genericParent = as<IRGeneric>(genericValue);
SLANG_ASSERT(genericParent);
+ SLANG_ASSERT(genericParent->getDataType());
auto func = as<IRFunc>(findGenericReturnVal(genericParent));
if (!func)
{
@@ -37,7 +38,8 @@ namespace Slang
return genericValue;
}
SLANG_ASSERT(func);
- if (!func->isDefinition())
+ // Do not lower intrinsic functions.
+ if (!func->isDefinition() || func->findDecoration<IRTargetIntrinsicDecoration>())
{
sharedContext->loweredGenericFunctions[genericValue] = genericValue;
return genericValue;
@@ -47,7 +49,10 @@ namespace Slang
builder.sharedBuilder = &sharedContext->sharedBuilderStorage;
builder.setInsertBefore(genericParent);
auto loweredFunc = cast<IRFunc>(cloneInstAndOperands(&cloneEnv, &builder, func));
- loweredFunc->setFullType(lowerGenericFuncType(&builder, cast<IRGeneric>(genericParent->getFullType())));
+ auto loweredGenericType =
+ lowerGenericFuncType(&builder, cast<IRGeneric>(genericParent->getFullType()));
+ SLANG_ASSERT(loweredGenericType);
+ loweredFunc->setFullType(loweredGenericType);
List<IRInst*> clonedParams;
for (auto genericChild : genericParent->getFirstBlock()->getChildren())