Skip to content

Commit 01f3196

Browse files
Configured the Reverse Mode and Forward Mode to use 'getZeroInit()' for assignments and initializations of variables
Fixes #1074
1 parent f42d44f commit 01f3196

40 files changed

+294
-244
lines changed

lib/Differentiator/BaseForwardModeVisitor.cpp

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,14 +1463,34 @@ BaseForwardModeVisitor::DifferentiateVarDecl(const VarDecl* VD,
14631463
initDiff = StmtDiff(Clone(init));
14641464
}
14651465

1466-
// Here we are assuming that derived type and the original type are same.
1467-
// This may not necessarily be true in the future.
1466+
Expr* finalInit = initDiff.getExpr();
1467+
if (init && VD->getType()->isRealFloatingType()) {
1468+
if (const auto* IL =
1469+
dyn_cast<IntegerLiteral>(init->IgnoreParenImpCasts())) {
1470+
if (IL->getValue() == 0)
1471+
finalInit = getZeroInit(VD->getType());
1472+
}
1473+
}
1474+
14681475
VarDecl* VDClone = BuildVarDecl(VD->getType(), VD->getNameAsString(),
1469-
initDiff.getExpr(), VD->isDirectInit());
1470-
// FIXME: Create unique identifier for derivative.
1476+
finalInit, VD->isDirectInit());
1477+
14711478
Expr* initDx = initDiff.getExpr_dx();
1479+
1480+
if (VD->getType()->isRealFloatingType()) {
1481+
bool needsFix = false;
1482+
1483+
if (!initDx) {
1484+
needsFix = true;
1485+
} else if (auto* IL =
1486+
dyn_cast<IntegerLiteral>(initDx->IgnoreParenImpCasts())) {
1487+
if (IL->getValue() == 0)
1488+
needsFix = true;
1489+
}
1490+
if (needsFix)
1491+
initDx = getZeroInit(VD->getType());
1492+
}
14721493
if (VD->getType()->isPointerType() && !initDx) {
1473-
// initialize with nullptr.
14741494
// NOLINTBEGIN(cppcoreguidelines-owned-memory)
14751495
initDx =
14761496
new (m_Context) CXXNullPtrLiteralExpr(VD->getType(), VD->getBeginLoc());
@@ -1485,7 +1505,6 @@ BaseForwardModeVisitor::DifferentiateVarDecl(const VarDecl* VD,
14851505
m_Variables.emplace(VDClone, BuildDeclRef(VDDerived));
14861506
return DeclDiff<VarDecl>(VDClone, VDDerived);
14871507
}
1488-
14891508
StmtDiff BaseForwardModeVisitor::VisitDeclStmt(const DeclStmt* DS) {
14901509
llvm::SmallVector<Decl*, 4> decls;
14911510
llvm::SmallVector<Decl*, 4> declsDiff;

lib/Differentiator/ReverseModeVisitor.cpp

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3119,8 +3119,15 @@ Expr* ReverseModeVisitor::getStdInitListSizeExpr(const Expr* E) {
31193119
if (isa<ArrayType>(VD->getType()))
31203120
assignment = BuildArrayAssignment(declRef, decl->getInit(),
31213121
direction::forward);
3122-
else
3123-
assignment = BuildOp(BO_Assign, declRef, decl->getInit());
3122+
else {
3123+
Expr* Init = decl->getInit();
3124+
if (auto* IL =
3125+
dyn_cast<IntegerLiteral>(Init->IgnoreParenImpCasts())) {
3126+
if (IL->getValue() == 0)
3127+
Init = getZeroInit(VD->getType());
3128+
}
3129+
assignment = BuildOp(BO_Assign, declRef, Init);
3130+
}
31243131
if (isInsideLoop) {
31253132
if (m_DiffReq.shouldBeRecorded(DS)) {
31263133
auto pushPop = StoreAndRestore(declRef, /*prefix=*/"_t",
@@ -3216,7 +3223,13 @@ Expr* ReverseModeVisitor::getStdInitListSizeExpr(const Expr* E) {
32163223
if (Expr* init = vDecl->getInit()) {
32173224
if (promoteToFnScope) {
32183225
auto* declRef = BuildDeclRef(vDecl);
3219-
auto* assignment = BuildOp(BO_Assign, declRef, init);
3226+
Expr* NewInit = init;
3227+
if (auto* IL =
3228+
dyn_cast<IntegerLiteral>(NewInit->IgnoreParenImpCasts())) {
3229+
if (IL->getValue() == 0)
3230+
NewInit = getZeroInit(vDecl->getType());
3231+
}
3232+
auto* assignment = BuildOp(BO_Assign, declRef, NewInit);
32203233
addToCurrentBlock(assignment, direction::forward);
32213234
SetDeclInit(vDecl, getZeroInit(vDecl->getType()),
32223235
/*DirectInit=*/true);
@@ -3252,7 +3265,24 @@ Expr* ReverseModeVisitor::getStdInitListSizeExpr(const Expr* E) {
32523265
declsDiff.append(declsToZeroInit.begin(), declsToZeroInit.end());
32533266
m_ExternalSource->ActBeforeFinalizingVisitDeclStmt(decls, declsDiff);
32543267
}
3255-
3268+
if (DSClone) {
3269+
if (auto* DS = dyn_cast<DeclStmt>(DSClone)) {
3270+
for (auto* D : DS->decls()) {
3271+
if (auto* VD = dyn_cast<VarDecl>(D)) {
3272+
if (VD && VD->hasInit()) {
3273+
Expr* Init = VD->getInit();
3274+
if (Init && VD->getType()->isRealFloatingType()) {
3275+
if (auto* IL =
3276+
dyn_cast<IntegerLiteral>(Init->IgnoreParenImpCasts())) {
3277+
if (IL->getValue() == 0)
3278+
VD->setInit(getZeroInit(VD->getType()));
3279+
}
3280+
}
3281+
}
3282+
}
3283+
}
3284+
}
3285+
}
32563286
return StmtDiff(DSClone);
32573287
}
32583288

lib/Differentiator/UsefulAnalyzer.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#include "UsefulAnalyzer.h"
2+
#include "clang/AST/Stmt.h"
3+
#include "llvm/ADT/STLExtras.h"
24

35
using namespace clang;
46

@@ -46,12 +48,11 @@ static void mergeVarsData(std::set<const clang::VarDecl*>* targetData,
4648
}
4749

4850
void UsefulAnalyzer::AnalyzeCFGBlock(const CFGBlock& block) {
49-
for (auto ib = block.end(); ib != block.begin() - 1; ib--) {
50-
if (ib->getKind() == clang::CFGElement::Statement) {
51+
for (const auto& Element : llvm::reverse(block)) {
52+
if (Element.getKind() == clang::CFGElement::Statement) {
53+
const clang::Stmt* S = Element.castAs<clang::CFGStmt>().getStmt();
5154

52-
const clang::Stmt* S = ib->castAs<clang::CFGStmt>().getStmt();
53-
// The const_cast is inevitable, since there is no
54-
// ConstRecusiveASTVisitor.
55+
// The const_cast is inevitable...
5556
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
5657
TraverseStmt(const_cast<clang::Stmt*>(S));
5758
}

test/Analyses/ActivityReverse.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ double f3(double x){
103103
//CHECK-NEXT: clad::tape<double> _t4 = {};
104104
//CHECK-NEXT: clad::tape<double> _t5 = {};
105105
//CHECK-NEXT: double _d_x1 = 0., _d_x2 = 0., _d_x3 = 0., _d_x4 = 0., _d_x5 = 0.;
106-
//CHECK-NEXT: double x1, x2, x3, x4, x5 = 0;
106+
//CHECK-NEXT: double x1, x2, x3, x4, x5 = 0.;
107107
//CHECK-NEXT: unsigned {{int|long}} _t0 = 0;
108108
//CHECK-NEXT: while (!x3)
109109
//CHECK-NEXT: {
@@ -203,7 +203,7 @@ double f6(double x){
203203

204204
// CHECK: void f6_grad(double x, double *_d_x) {
205205
// CHECK-NEXT: double _t0;
206-
// CHECK-NEXT: double a = 0;
206+
// CHECK-NEXT: double a = 0.;
207207
// CHECK-NEXT: if (0) {
208208
// CHECK-NEXT: _t0 = a;
209209
// CHECK-NEXT: a = x;
@@ -491,7 +491,7 @@ double f14(double x){
491491
// CHECK-NEXT: double _d_a = 0., _d_b = 0.;
492492
// CHECK-NEXT: double a, b;
493493
// CHECK-NEXT: double _d_x1 = 0., _d_x2 = 0., _d_x3 = 0.;
494-
// CHECK-NEXT: double x1 = 0, x2 = 0, x3 = 0, x4 = 0;
494+
// CHECK-NEXT: double x1 = 0., x2 = 0., x3 = 0., x4 = 0.;
495495
// CHECK-NEXT: int i = 10;
496496
// CHECK-NEXT: unsigned {{int|long}} _t0 = 0;
497497
// CHECK-NEXT: while (i)

test/Analyses/TBR.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ double f2(double val) {
5151
//CHECK-NEXT: clad::tape<bool> _cond0 = {};
5252
//CHECK-NEXT: clad::tape<unsigned {{int|long}}> _t1 = {};
5353
//CHECK-NEXT: double _d_res = 0.;
54-
//CHECK-NEXT: double res = 0;
54+
//CHECK-NEXT: double res = 0.;
5555
//CHECK-NEXT: unsigned {{int|long}} _t0 = 0;
5656
//CHECK-NEXT: for (i = 1; i < 5; ++i) {
5757
//CHECK-NEXT: _t0++;
@@ -106,9 +106,9 @@ double f3(double x){
106106
//CHECK-NEXT: double _d_i = 0.;
107107
//CHECK-NEXT: double i = 1;
108108
//CHECK-NEXT: double _d_j = 0.;
109-
//CHECK-NEXT: double j = 0;
109+
//CHECK-NEXT: double j = 0.;
110110
//CHECK-NEXT: double _d_res = 0.;
111-
//CHECK-NEXT: double res = 0;
111+
//CHECK-NEXT: double res = 0.;
112112
//CHECK-NEXT: res += i * x;
113113
//CHECK-NEXT: {
114114
//CHECK-NEXT: _cond0 = j;

test/Analyses/UsefulForward.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ double f2(double x){
2626

2727
// CHECK: double f2_darg0(double x) {
2828
// CHECK-NEXT: double _d_x = 1;
29-
// CHECK-NEXT: double a = 0;
29+
// CHECK-NEXT: double a = 0.;
3030
// CHECK-NEXT: a = 1;
3131
// CHECK-NEXT: return _d_x;
3232
// CHECK-NEXT:}
@@ -44,8 +44,8 @@ double f3(double x){
4444

4545
// CHECK: double f3_darg0(double x) {
4646
// CHECK-NEXT: double _d_x = 1;
47-
// CHECK-NEXT: double _d_x1 = 0, _d_x2 = 0, _d_x3 = 0, _d_x4 = 0, _d_x5 = 0;
48-
// CHECK-NEXT: double x1 = 0, x2 = 1, x3 = 1, x4 = 1, x5 = 1;
47+
// CHECK-NEXT: double _d_x1 = 0., _d_x2 = 0., _d_x3 = 0., _d_x4 = 0., _d_x5 = 0.;
48+
// CHECK-NEXT: double x1 = 0., x2 = 1, x3 = 1, x4 = 1, x5 = 1;
4949
// CHECK-NEXT: while (x5)
5050
// CHECK-NEXT: {
5151
// CHECK-NEXT: _d_x5 = _d_x4;
@@ -69,8 +69,8 @@ double f4(double x){
6969

7070
// CHECK: double f4_darg0(double x) {
7171
// CHECK-NEXT: double _d_x = 1;
72-
// CHECK-NEXT: double _d_a = 0;
73-
// CHECK-NEXT: double a = 0;
72+
// CHECK-NEXT: double _d_a = 0.;
73+
// CHECK-NEXT: double a = 0.;
7474
// CHECK-NEXT: if (0) {
7575
// CHECK-NEXT: _d_a = _d_x;
7676
// CHECK-NEXT: a = x;
@@ -111,8 +111,8 @@ double f6(double x){
111111

112112
// CHECK: double f6_darg0(double x) {
113113
// CHECK-NEXT: double _d_x = 1;
114-
// CHECK-NEXT: double _d_j = 0;
115-
// CHECK-NEXT: double j = 0;
114+
// CHECK-NEXT: double _d_j = 0.;
115+
// CHECK-NEXT: double j = 0.;
116116
// CHECK-NEXT: for (int i = 0; i < 5; i++) {
117117
// CHECK-NEXT: _d_j += _d_x + _d_x;
118118
// CHECK-NEXT: j += x + x;

test/Arrays/ArrayInputsForwardMode.C

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ double addArr(const double *arr, int n) {
2929

3030
//CHECK: double addArr_darg0_1(const double *arr, int n) {
3131
//CHECK-NEXT: int _d_n = 0;
32-
//CHECK-NEXT: double _d_ret = 0;
33-
//CHECK-NEXT: double ret = 0;
32+
//CHECK-NEXT: double _d_ret = 0.;
33+
//CHECK-NEXT: double ret = 0.;
3434
//CHECK-NEXT: {
3535
//CHECK-NEXT: int _d_i = 0;
3636
//CHECK-NEXT: for (int i = 0; i < n; i++) {

test/Arrays/ArrayInputsReverseMode.C

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ double addArr(const double *arr, int n) {
1818
//CHECK-NEXT: int _d_i = 0;
1919
//CHECK-NEXT: int i = 0;
2020
//CHECK-NEXT: double _d_ret = 0.;
21-
//CHECK-NEXT: double ret = 0;
21+
//CHECK-NEXT: double ret = 0.;
2222
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
2323
//CHECK-NEXT: for (i = 0; i < n; i++) {
2424
//CHECK-NEXT: _t0++;
@@ -59,7 +59,7 @@ float func(float* a, float* b) {
5959
//CHECK-NEXT: int i = 0;
6060
//CHECK-NEXT: clad::tape<float> _t1 = {};
6161
//CHECK-NEXT: float _d_sum = 0.F;
62-
//CHECK-NEXT: float sum = 0;
62+
//CHECK-NEXT: float sum = 0.F;
6363
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
6464
//CHECK-NEXT: for (i = 0; i < 3; i++) {
6565
//CHECK-NEXT: _t0++;
@@ -103,7 +103,7 @@ float func2(float* a) {
103103
//CHECK-NEXT: int _d_i = 0;
104104
//CHECK-NEXT: int i = 0;
105105
//CHECK-NEXT: float _d_sum = 0.F;
106-
//CHECK-NEXT: float sum = 0;
106+
//CHECK-NEXT: float sum = 0.F;
107107
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
108108
//CHECK-NEXT: for (i = 0; i < 3; i++) {
109109
//CHECK-NEXT: _t0++;
@@ -130,7 +130,7 @@ float func3(float* a, float* b) {
130130
//CHECK-NEXT: int _d_i = 0;
131131
//CHECK-NEXT: int i = 0;
132132
//CHECK-NEXT: float _d_sum = 0.F;
133-
//CHECK-NEXT: float sum = 0;
133+
//CHECK-NEXT: float sum = 0.F;
134134
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
135135
//CHECK-NEXT: for (i = 0; i < 3; i++) {
136136
//CHECK-NEXT: _t0++;
@@ -161,7 +161,7 @@ double func4(double x) {
161161
//CHECK-NEXT: double _d_arr[3] = {0};
162162
//CHECK-NEXT: double arr[3] = {x, 2 * x, x * x};
163163
//CHECK-NEXT: double _d_sum = 0.;
164-
//CHECK-NEXT: double sum = 0;
164+
//CHECK-NEXT: double sum = 0.;
165165
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
166166
//CHECK-NEXT: for (i = 0; i < 3; i++) {
167167
//CHECK-NEXT: _t0++;
@@ -216,7 +216,7 @@ double func5(int k) {
216216
//CHECK-NEXT: arr[i] = k;
217217
//CHECK-NEXT: }
218218
//CHECK-NEXT: double _d_sum = 0.;
219-
//CHECK-NEXT: double sum = 0;
219+
//CHECK-NEXT: double sum = 0.;
220220
//CHECK-NEXT: unsigned {{int|long|long long}} _t1 = 0;
221221
//CHECK-NEXT: for (i0 = 0; i0 < 3; i0++) {
222222
//CHECK-NEXT: _t1++;
@@ -258,7 +258,7 @@ double func6(double seed) {
258258
//CHECK-NEXT: double _d_arr[3] = {0};
259259
//CHECK-NEXT: double arr[3] = {0};
260260
//CHECK-NEXT: double _d_sum = 0.;
261-
//CHECK-NEXT: double sum = 0;
261+
//CHECK-NEXT: double sum = 0.;
262262
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
263263
//CHECK-NEXT: for (i = 0; i < 3; i++) {
264264
//CHECK-NEXT: _t0++;
@@ -316,7 +316,7 @@ double func7(double *params) {
316316
//CHECK-NEXT: double _d_out = 0.;
317317
//CHECK-NEXT: double out = 0.;
318318
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
319-
//CHECK-NEXT: for (i = 0; i < 1; ++i) {
319+
//CHECK-NEXT: for (i = {{0|0U|0UL}}; i < 1; ++i) {
320320
//CHECK-NEXT: _t0++;
321321
//CHECK-NEXT: clad::move({params[0]}, paramsPrime);
322322
//CHECK-NEXT: out = out + inv_square(paramsPrime);
@@ -357,7 +357,7 @@ double func8(double i, double *arr, int n) {
357357

358358
//CHECK: void func8_grad(double i, double *arr, int n, double *_d_i, double *_d_arr, int *_d_n) {
359359
//CHECK-NEXT: double _d_res = 0.;
360-
//CHECK-NEXT: double res = 0;
360+
//CHECK-NEXT: double res = 0.;
361361
//CHECK-NEXT: arr[0] = 1;
362362
//CHECK-NEXT: res = helper2(i, arr, n);
363363
//CHECK-NEXT: double _t0 = arr[0];
@@ -464,7 +464,7 @@ double func10(double *arr, int n) {
464464
//CHECK-NEXT: int i = 0;
465465
//CHECK-NEXT: clad::tape<double> _t1 = {};
466466
//CHECK-NEXT: double _d_res = 0.;
467-
//CHECK-NEXT: double res = 0;
467+
//CHECK-NEXT: double res = 0.;
468468
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
469469
// CHECK-NEXT: for (i = 0; i < n; ++i) {
470470
// CHECK-NEXT: _t0++;
@@ -500,7 +500,7 @@ double func11(double seed) {
500500
// CHECK-NEXT: double _d_arr[3] = {0};
501501
// CHECK-NEXT: double arr[3];
502502
// CHECK-NEXT: double _d_sum = 0.;
503-
// CHECK-NEXT: double sum = 0;
503+
// CHECK-NEXT: double sum = 0.;
504504
// CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
505505
// CHECK-NEXT: for (i = 0; i < 3; i++) {
506506
// CHECK-NEXT: _t0++;
@@ -550,7 +550,7 @@ double func12(double x[3], double y[3]) {
550550
//CHECK-NEXT: int _d_i = 0;
551551
//CHECK-NEXT: int i = 0;
552552
//CHECK-NEXT: double _d_prod = 0.;
553-
//CHECK-NEXT: double prod = 0;
553+
//CHECK-NEXT: double prod = 0.;
554554
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
555555
//CHECK-NEXT: for (i = 0; i < 3; ++i) {
556556
//CHECK-NEXT: _t0++;
@@ -581,7 +581,7 @@ double func13(double* x, double y) {
581581
// CHECK-NEXT: double _d_arr[4] = {0};
582582
// CHECK-NEXT: double arr[4] = {0};
583583
// CHECK-NEXT: double _d_prod = 0.;
584-
// CHECK-NEXT: double prod = 0;
584+
// CHECK-NEXT: double prod = 0.;
585585
// CHECK-NEXT: unsigned {{int|long}} _t0 = 0;
586586
// CHECK-NEXT: for (i = 0; i < 2; ++i) {
587587
// CHECK-NEXT: _t0++;

test/Arrays/Arrays.C

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ double sum(double x, double y, double z) {
2222
//CHECK-NEXT: double _d_z = 0;
2323
//CHECK-NEXT: double _d_vars[3] = {_d_x, _d_y, _d_z};
2424
//CHECK-NEXT: double vars[3] = {x, y, z};
25-
//CHECK-NEXT: double _d_s = 0;
26-
//CHECK-NEXT: double s = 0;
25+
//CHECK-NEXT: double _d_s = 0.;
26+
//CHECK-NEXT: double s = 0.;
2727
//CHECK-NEXT: {
2828
//CHECK-NEXT: int _d_i = 0;
2929
//CHECK-NEXT: for (int i = 0; i < 3; i++) {
@@ -60,8 +60,8 @@ double sum_squares(double x, double y, double z) {
6060
//CHECK-NEXT: squares[i] = vars[i] * vars[i];
6161
//CHECK-NEXT: }
6262
//CHECK-NEXT: }
63-
//CHECK-NEXT: double _d_s = 0;
64-
//CHECK-NEXT: double s = 0;
63+
//CHECK-NEXT: double _d_s = 0.;
64+
//CHECK-NEXT: double s = 0.;
6565
//CHECK-NEXT: {
6666
//CHECK-NEXT: int _d_i = 0;
6767
//CHECK-NEXT: for (int i = 0; i < 3; i++) {

test/ErrorEstimation/LoopsAndArrays.C

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ float func(float* p, int n) {
2222
//CHECK-NEXT: clad::tape<float> _t1 = {};
2323
//CHECK-NEXT: unsigned {{int|long}} p_size = {{0U|0UL}};
2424
//CHECK-NEXT: float _d_sum = 0.F;
25-
//CHECK-NEXT: float sum = 0;
25+
//CHECK-NEXT: float sum = 0.F;
2626
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
2727
//CHECK-NEXT: for (i = 0; i < n; i++) {
2828
//CHECK-NEXT: _t0++;
@@ -155,7 +155,7 @@ float func4(float x[10], float y[10]) {
155155
//CHECK-NEXT: unsigned {{int|long}} y_size = {{0U|0UL}};
156156
//CHECK-NEXT: clad::tape<float> _t2 = {};
157157
//CHECK-NEXT: float _d_sum = 0.F;
158-
//CHECK-NEXT: float sum = 0;
158+
//CHECK-NEXT: float sum = 0.F;
159159
//CHECK-NEXT: unsigned {{int|long|long long}} _t0 = 0;
160160
//CHECK-NEXT: for (i = 0; i < 10; i++) {
161161
//CHECK-NEXT: _t0++;
@@ -310,7 +310,7 @@ double func6(double x) {
310310
//CHECK-NEXT: int i = 0;
311311
//CHECK-NEXT: clad::tape<double> _t1 = {};
312312
//CHECK-NEXT: double _d_sum = 0.;
313-
//CHECK-NEXT: double sum = 0;
313+
//CHECK-NEXT: double sum = 0.;
314314
//CHECK-NEXT: unsigned {{int|long}} _t0 = 0;
315315
//CHECK-NEXT: for (i = 1; i < 10; i++) {
316316
//CHECK-NEXT: _t0++;

0 commit comments

Comments
 (0)