Skip to content

Commit 93e676f

Browse files
committed
Remove initialization order workaround.
1 parent e95bd0a commit 93e676f

File tree

3 files changed

+21
-28
lines changed

3 files changed

+21
-28
lines changed

regression-tests/pure2-autodiff.cpp2

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ ad_test: @autodiff @print type = {
111111
}
112112

113113
intermediate_no_init: (x: double, y: double) -> (r: double) = {
114-
r = 0.0; // TODO: r has to be initialized before t (create issue or wait for fix)
115114
t: double;
116115
t = x + y;
117116

regression-tests/test-results/pure2-autodiff.cpp

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#line 2 "pure2-autodiff.cpp2"
1212
class ad_test;
1313

14-
#line 156 "pure2-autodiff.cpp2"
14+
#line 155 "pure2-autodiff.cpp2"
1515
class ad_test_twice;
1616

1717

@@ -137,17 +137,17 @@ using intermediate_no_init_ret = double;
137137
using while_loop_ret = double;
138138

139139

140-
#line 121 "pure2-autodiff.cpp2"
140+
#line 120 "pure2-autodiff.cpp2"
141141
public: [[nodiscard]] static auto while_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> while_loop_ret;
142142
using do_while_loop_ret = double;
143143

144144

145-
#line 130 "pure2-autodiff.cpp2"
145+
#line 129 "pure2-autodiff.cpp2"
146146
public: [[nodiscard]] static auto do_while_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> do_while_loop_ret;
147147
using for_loop_ret = double;
148148

149149

150-
#line 141 "pure2-autodiff.cpp2"
150+
#line 140 "pure2-autodiff.cpp2"
151151
public: [[nodiscard]] static auto for_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> for_loop_ret;
152152
struct add_1_d_ret { double r; double r_d; };
153153

@@ -259,13 +259,13 @@ public: [[nodiscard]] static auto for_loop_d(cpp2::impl::in<double> x, cpp2::imp
259259
public: auto operator=(ad_test const&) -> void = delete;
260260

261261

262-
#line 154 "pure2-autodiff.cpp2"
262+
#line 153 "pure2-autodiff.cpp2"
263263
};
264264

265265
class ad_test_twice {
266266
using mul_1_ret = double;
267267

268-
#line 157 "pure2-autodiff.cpp2"
268+
#line 156 "pure2-autodiff.cpp2"
269269
public: [[nodiscard]] static auto mul_1(cpp2::impl::in<double> x) -> mul_1_ret;
270270
struct mul_1_d_ret { double r; double r_d; };
271271

@@ -285,12 +285,12 @@ public: [[nodiscard]] static auto mul_1_d_d2(cpp2::impl::in<double> x, cpp2::imp
285285
public: auto operator=(ad_test_twice const&) -> void = delete;
286286

287287

288-
#line 160 "pure2-autodiff.cpp2"
288+
#line 159 "pure2-autodiff.cpp2"
289289
};
290290

291291
auto write_output(cpp2::impl::in<std::string> func, cpp2::impl::in<double> x, cpp2::impl::in<double> x_d, cpp2::impl::in<double> y, cpp2::impl::in<double> y_d, auto const& ret) -> void;
292292

293-
#line 166 "pure2-autodiff.cpp2"
293+
#line 165 "pure2-autodiff.cpp2"
294294
auto main() -> int;
295295

296296
//=== Cpp2 function definitions =================================================
@@ -474,17 +474,16 @@ auto main() -> int;
474474
[[nodiscard]] auto ad_test::intermediate_no_init(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> intermediate_no_init_ret{
475475
cpp2::impl::deferred_init<double> r;
476476
#line 114 "pure2-autodiff.cpp2"
477-
r.construct(0.0);// TODO: r has to be initialized before t (create issue or wait for fix)
478477
cpp2::impl::deferred_init<double> t;
479478
t.construct(x + y);
480479

481-
r.value() = cpp2::move(t.value());
480+
r.construct(cpp2::move(t.value()));
482481
return std::move(r.value()); }
483482

484-
#line 121 "pure2-autodiff.cpp2"
483+
#line 120 "pure2-autodiff.cpp2"
485484
[[nodiscard]] auto ad_test::while_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> while_loop_ret{
486485
cpp2::impl::deferred_init<double> r;
487-
#line 122 "pure2-autodiff.cpp2"
486+
#line 121 "pure2-autodiff.cpp2"
488487
int i {0};
489488

490489
r.construct(x);
@@ -493,10 +492,10 @@ auto main() -> int;
493492
}return std::move(r.value());
494493
}
495494

496-
#line 130 "pure2-autodiff.cpp2"
495+
#line 129 "pure2-autodiff.cpp2"
497496
[[nodiscard]] auto ad_test::do_while_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> do_while_loop_ret{
498497
cpp2::impl::deferred_init<double> r;
499-
#line 131 "pure2-autodiff.cpp2"
498+
#line 130 "pure2-autodiff.cpp2"
500499
int i {0};
501500

502501
r.construct(x);
@@ -507,10 +506,10 @@ auto main() -> int;
507506
cpp2::impl::cmp_less(i,2));return std::move(r.value());
508507
}
509508

510-
#line 141 "pure2-autodiff.cpp2"
509+
#line 140 "pure2-autodiff.cpp2"
511510
[[nodiscard]] auto ad_test::for_loop(cpp2::impl::in<double> x, cpp2::impl::in<double> y) -> for_loop_ret{
512511
cpp2::impl::deferred_init<double> r;
513-
#line 142 "pure2-autodiff.cpp2"
512+
#line 141 "pure2-autodiff.cpp2"
514513
std::vector<double> v {};
515514

516515
CPP2_UFCS(push_back)(v, x);
@@ -739,10 +738,8 @@ double t_d {};
739738

740739
[[nodiscard]] auto ad_test::intermediate_no_init_d(cpp2::impl::in<double> x, cpp2::impl::in<double> x_d, cpp2::impl::in<double> y, cpp2::impl::in<double> y_d) -> intermediate_no_init_d_ret{
741740
double r {0.0};
742-
double r_d {0.0};r_d = { };
743-
r = 0.0;
744-
745-
cpp2::impl::deferred_init<double> t_d;
741+
double r_d {0.0};
742+
cpp2::impl::deferred_init<double> t_d;
746743

747744
cpp2::impl::deferred_init<double> t;
748745
t_d.construct(x_d + y_d);
@@ -815,10 +812,10 @@ auto const& t_d{*cpp2::impl::assert_not_null(t_d_iter)};
815812
return { std::move(r), std::move(r_d) };
816813
}
817814

818-
#line 157 "pure2-autodiff.cpp2"
815+
#line 156 "pure2-autodiff.cpp2"
819816
[[nodiscard]] auto ad_test_twice::mul_1(cpp2::impl::in<double> x) -> mul_1_ret{
820817
cpp2::impl::deferred_init<double> r;
821-
#line 158 "pure2-autodiff.cpp2"
818+
#line 157 "pure2-autodiff.cpp2"
822819
r.construct(x * x);
823820
return std::move(r.value()); }
824821

@@ -855,12 +852,12 @@ auto temp_1_d2 {x * x_d_d2 + x_d * x_d2};
855852
return { std::move(r), std::move(r_d2), std::move(r_d), std::move(r_d_d2) };
856853
}
857854

858-
#line 162 "pure2-autodiff.cpp2"
855+
#line 161 "pure2-autodiff.cpp2"
859856
auto write_output(cpp2::impl::in<std::string> func, cpp2::impl::in<double> x, cpp2::impl::in<double> x_d, cpp2::impl::in<double> y, cpp2::impl::in<double> y_d, auto const& ret) -> void{
860857
std::cout << "diff(" + cpp2::to_string(func) + ") at (x = " + cpp2::to_string(x) + ", x_d = " + cpp2::to_string(x_d) + ", y = " + cpp2::to_string(y) + ", y_d = " + cpp2::to_string(y_d) + ") = (r = " + cpp2::to_string(ret.r) + ", r_d = " + cpp2::to_string(ret.r_d) + ")" << std::endl;
861858
}
862859

863-
#line 166 "pure2-autodiff.cpp2"
860+
#line 165 "pure2-autodiff.cpp2"
864861
auto main() -> int{
865862

866863
double x {2.0};

regression-tests/test-results/pure2-autodiff.cpp2.output

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ ad_test:/* @autodiff @print */ type =
223223
in y: double,
224224
) -> (out r: double, ) =
225225
{
226-
r = 0.0;
227226
t: double;
228227
t = x + y;
229228
r = t;
@@ -665,8 +664,6 @@ ad_test:/* @autodiff @print */ type =
665664
out r_d: double = 0.0,
666665
) =
667666
{
668-
r_d = ();
669-
r = 0.0;
670667
t_d: double;
671668
t: double;
672669
t_d = x_d + y_d;

0 commit comments

Comments
 (0)