From 6fae15cd1210d8b664243d640e70ca47dccf9752 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 19 Jan 2023 08:58:20 -0800 Subject: Add diagnostic for calling non-bwd-diff func from bwd-diff func. (#2602) --- source/slang/slang-check-expr.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-check-expr.cpp') diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index 2fc18628e..43124b535 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1967,6 +1967,10 @@ namespace Slang if (m_parentDifferentiableAttr) { + FunctionDifferentiableLevel callerDiffLevel = FunctionDifferentiableLevel::None; + if (m_parentFunc) + callerDiffLevel = getShared()->getFuncDifferentiableLevel(m_parentFunc); + if (auto checkedInvokeExpr = as(checkedExpr)) { // Register types for final resolved invoke arguments again. @@ -1978,7 +1982,8 @@ namespace Slang { if (auto calleeDecl = as(calleeExpr->declRef.getDecl())) { - if (getShared()->isDifferentiableFunc(calleeDecl)) + auto calleeDiffLevel = getShared()->getFuncDifferentiableLevel(calleeDecl); + if (calleeDiffLevel >= callerDiffLevel) { if (!m_treatAsDifferentiableExpr) { -- cgit v1.2.3