From 6c26aa1f7e3e28e3053dffe686baa8e0499c624d Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 1 Mar 2023 12:59:51 -0800 Subject: Improve diagnostic on differentiablitiy check. (#2687) Co-authored-by: Yong He --- tests/diagnostics/autodiff-data-flow-3.slang | 13 +++++++++++++ tests/diagnostics/autodiff-data-flow-3.slang.expected | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'tests/diagnostics') diff --git a/tests/diagnostics/autodiff-data-flow-3.slang b/tests/diagnostics/autodiff-data-flow-3.slang index 0a8e3e58a..21dd9f76c 100644 --- a/tests/diagnostics/autodiff-data-flow-3.slang +++ b/tests/diagnostics/autodiff-data-flow-3.slang @@ -17,10 +17,23 @@ float g(float x) return obj.fp.f; } +[BackwardDifferentiable] +void diffOut(inout float x) +{ + x = 2; +} + +float noDiffFunc(float x) +{ + return 0.0; +} + [BackwardDifferentiable] float h(float x) { NoDiffField obj; obj.fp.f = detach(x * x); // OK. + obj.fp.f = noDiffFunc(x); // OK. + diffOut(obj.fp.f); // Error. return obj.fp.f; } diff --git a/tests/diagnostics/autodiff-data-flow-3.slang.expected b/tests/diagnostics/autodiff-data-flow-3.slang.expected index 73381cf58..817b595a6 100644 --- a/tests/diagnostics/autodiff-data-flow-3.slang.expected +++ b/tests/diagnostics/autodiff-data-flow-3.slang.expected @@ -1,8 +1,11 @@ result code = -1 standard error = { -tests/diagnostics/autodiff-data-flow-3.slang(16): error 41024: derivative is lost during assignment to non-differentiable location. Use 'detach()' to clarify intention. +tests/diagnostics/autodiff-data-flow-3.slang(16): error 41024: derivative is lost during assignment to non-differentiable location, use 'detach()' to clarify intention. obj.fp.f = x * x; // Error, this location cannot hold derivative. ^ +tests/diagnostics/autodiff-data-flow-3.slang(37): error 41025: derivative is lost when passing a non-differentiable location to an `out` or `inout` parameter, consider passing a temporary variable instead. + diffOut(obj.fp.f); // Error. + ^ } standard output = { } -- cgit v1.2.3