//@ compile-flags: -Zautodiff=Enable -Zautodiff=NoPostopt -C opt-level=3 -Clto=fat //@ no-prefer-dynamic //@ needs-enzyme // Just check it does not crash for now // CHECK: ; #![feature(autodiff)] use std::autodiff::autodiff_reverse; struct Foo { a: f64, } trait MyTrait { fn f(&self, x: f64) -> f64; fn df(&self, x: f64, seed: f64) -> (f64, f64); } impl MyTrait for Foo { #[autodiff_reverse(df, Const, Active, Active)] fn f(&self, x: f64) -> f64 { self.a * 0.25 * (x * x - 1.0 - 2.0 * x.ln()) } } fn main() { let foo = Foo { a: 3.0f64 }; dbg!(foo.df(1.0, 1.0)); }