@@ -411,6 +411,41 @@ double fn7(double x, double y) {
411411// CHECK-NEXT: }
412412// CHECK-NEXT: }
413413
414+ double fn8 (double u , double v ) {
415+ std ::pair < double , double > p (u ,v );
416+ return p .first + p .second ;
417+ }
418+
419+ // CHECK: static constexpr void constructor_pullback(double &__{{u1|x}}, double &__{{u2|y}}, std::pair<double, double> *_d_this, double *_d___{{u1|x}}, double *_d___{{u2|y}}) {{.*}}{
420+ // CHECK-NEXT: std::pair<double, double> *_this = (std::pair<double, double> *)malloc(sizeof(std::pair<double, double>));
421+ // CHECK: double _t0 = __{{u1|x}};
422+ // CHECK-NEXT: _this->first = std::forward<double &>(__{{u1|x}});
423+ // CHECK-NEXT: double _t1 = __{{u2|y}};
424+ // CHECK-NEXT: _this->second = std::forward<double &>(__{{u2|y}});
425+ // CHECK-NEXT: {
426+ // CHECK-NEXT: clad::custom_derivatives::std::forward_pullback(__{{u2|y}}, _d_this->second, &*_d___{{u2|y}});
427+ // CHECK-NEXT: __{{u2|y}} = _t1;
428+ // CHECK-NEXT: _d_this->second = 0.;
429+ // CHECK-NEXT: }
430+ // CHECK-NEXT: {
431+ // CHECK-NEXT: clad::custom_derivatives::std::forward_pullback(__{{u1|x}}, _d_this->first, &*_d___{{u1|x}});
432+ // CHECK-NEXT: __{{u1|x}} = _t0;
433+ // CHECK-NEXT: _d_this->first = 0.;
434+ // CHECK-NEXT: }
435+ // CHECK-NEXT: free(_this);
436+ // CHECK-NEXT: }
437+
438+ // CHECK: void fn8_grad(double u, double v, double *_d_u, double *_d_v) {
439+ // CHECK-NEXT: std::pair<double, double> p(u, v);
440+ // CHECK-NEXT: std::pair<double, double> _d_p(p);
441+ // CHECK-NEXT: clad::zero_init(_d_p);
442+ // CHECK-NEXT: {
443+ // CHECK-NEXT: _d_p.first += 1;
444+ // CHECK-NEXT: _d_p.second += 1;
445+ // CHECK-NEXT: }
446+ // CHECK-NEXT: pair::constructor_pullback(u, v, &_d_p, &*_d_u, &*_d_v);
447+ // CHECK-NEXT: }
448+
414449int main () {
415450 double d_i , d_j ;
416451
@@ -433,4 +468,7 @@ int main() {
433468
434469 INIT_GRADIENT (fn7 );
435470 TEST_GRADIENT (fn7 , /*numOfDerivativeArgs=*/ 2 , 2 , 9 , & d_i , & d_j ); // CHECK-EXEC: {12.00, 0.00}
471+
472+ INIT_GRADIENT (fn8 );
473+ TEST_GRADIENT (fn8 , /*numOfDerivativeArgs=*/ 2 , 7 , 2 , & d_i , & d_j ); // CHECK-EXEC: {1.00, 1.00}
436474}
0 commit comments