Skip to content

Commit cb31b0d

Browse files
committed
Fix(compiler): IfStatement - support break (dont create two terminators in one block)
1 parent 219061f commit cb31b0d

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/backend/llvm/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ export function passIfStatement(parent: ts.IfStatement, ctx: Context, builder: l
5353
builder.setInsertionPoint(positiveBlock);
5454
passNode(parent.thenStatement, ctx, builder);
5555

56-
builder.createBr(next);
56+
if (!positiveBlock.getTerminator()) {
57+
builder.createBr(next);
58+
}
5759

5860
builder.setInsertionPoint(next);
5961
}

tests/snapshots/math/for.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@
1010
return total;
1111
}
1212

13+
function simpleBreak(): number {
14+
let total: number = 0;
15+
16+
for (let i = 0; ; i++) {
17+
total = total + i;
18+
19+
if (i > 100) {
20+
break;
21+
}
22+
}
23+
24+
return total;
25+
}
26+
1327
calculateTotalFromRange(1, 100);
1428
calculateTotalFromRange(50, 100);
29+
simpleBreak();
1530
}

0 commit comments

Comments
 (0)