summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-02-04 20:07:14 -0800
committerGitHub <noreply@github.com>2023-02-04 20:07:14 -0800
commita12c5511a9003efb23b265a7f2f613cf49aa9f07 (patch)
treeb23bab09ae99df1516a89ac60f9779cf979ff2ef /source/slang/slang-check-expr.cpp
parent228e71dab7dfa18ece979f4099ec0c7d1e37e5ff (diff)
Patch transcription of `inout` non differentiable params. (#2623)
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index a52a08f15..7e2bc3822 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -2232,9 +2232,18 @@ namespace Slang
{
if (as<DifferentialPairType>(derivType))
{
- // Using inout type on all the derivative parameters
+ // An `in` differentiable parameter becomes an `inout` parameter.
derivType = m_astBuilder->getInOutType(derivType);
}
+ else if (auto inoutType = as<InOutType>(derivType))
+ {
+ if (!as<DifferentialPairType>(inoutType->getValueType()))
+ {
+ // An `inout` non differentiable parameter becomes an `in` parameter
+ // (removing `out`).
+ derivType = inoutType->getValueType();
+ }
+ }
type->paramTypes.add(derivType);
}
}