Skip to content

Commit 6074815

Browse files
authored
Merge pull request #723 from sysprog21/fix-llvm-builder-leak
Fix LLVM builder leaks in T2C's cbeqz/cbnez/fuse12
2 parents 960ed8b + 7cd4602 commit 6074815

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/t2c_template.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,23 +1209,27 @@ T2C_OP(cbeqz, {
12091209
LLVMBasicBlockRef taken = LLVMAppendBasicBlock(start, "taken");
12101210
LLVMBuilderRef builder2 = LLVMCreateBuilder();
12111211
LLVMPositionBuilderAtEnd(builder2, taken);
1212-
if (ir->branch_taken)
1212+
if (ir->branch_taken &&
1213+
t2c_check_valid_blk(rv, block, ir->branch_taken->pc)) {
12131214
*taken_builder = builder2;
1214-
else {
1215+
} else {
12151216
T2C_LLVM_GEN_STORE_IMM32(builder2, ir->pc + ir->imm, addr_PC);
12161217
T2C_STORE_TIMER(builder2, start, insn_counter);
12171218
LLVMBuildRetVoid(builder2);
1219+
LLVMDisposeBuilder(builder2);
12181220
}
12191221

12201222
LLVMBasicBlockRef untaken = LLVMAppendBasicBlock(start, "untaken");
12211223
LLVMBuilderRef builder3 = LLVMCreateBuilder();
12221224
LLVMPositionBuilderAtEnd(builder3, untaken);
1223-
if (ir->branch_untaken)
1225+
if (ir->branch_untaken &&
1226+
t2c_check_valid_blk(rv, block, ir->branch_untaken->pc)) {
12241227
*untaken_builder = builder3;
1225-
else {
1228+
} else {
12261229
T2C_LLVM_GEN_STORE_IMM32(builder3, ir->pc + 2, addr_PC);
12271230
T2C_STORE_TIMER(builder3, start, insn_counter);
12281231
LLVMBuildRetVoid(builder3);
1232+
LLVMDisposeBuilder(builder3);
12291233
}
12301234
LLVMBuildCondBr(*builder, cmp, taken, untaken);
12311235
})
@@ -1237,23 +1241,27 @@ T2C_OP(cbnez, {
12371241
LLVMBasicBlockRef taken = LLVMAppendBasicBlock(start, "taken");
12381242
LLVMBuilderRef builder2 = LLVMCreateBuilder();
12391243
LLVMPositionBuilderAtEnd(builder2, taken);
1240-
if (ir->branch_taken)
1244+
if (ir->branch_taken &&
1245+
t2c_check_valid_blk(rv, block, ir->branch_taken->pc)) {
12411246
*taken_builder = builder2;
1242-
else {
1247+
} else {
12431248
T2C_LLVM_GEN_STORE_IMM32(builder2, ir->pc + ir->imm, addr_PC);
12441249
T2C_STORE_TIMER(builder2, start, insn_counter);
12451250
LLVMBuildRetVoid(builder2);
1251+
LLVMDisposeBuilder(builder2);
12461252
}
12471253

12481254
LLVMBasicBlockRef untaken = LLVMAppendBasicBlock(start, "untaken");
12491255
LLVMBuilderRef builder3 = LLVMCreateBuilder();
12501256
LLVMPositionBuilderAtEnd(builder3, untaken);
1251-
if (ir->branch_untaken)
1257+
if (ir->branch_untaken &&
1258+
t2c_check_valid_blk(rv, block, ir->branch_untaken->pc)) {
12521259
*untaken_builder = builder3;
1253-
else {
1260+
} else {
12541261
T2C_LLVM_GEN_STORE_IMM32(builder3, ir->pc + 2, addr_PC);
12551262
T2C_STORE_TIMER(builder3, start, insn_counter);
12561263
LLVMBuildRetVoid(builder3);
1264+
LLVMDisposeBuilder(builder3);
12571265
}
12581266
LLVMBuildCondBr(*builder, cmp, taken, untaken);
12591267
})
@@ -1683,6 +1691,7 @@ T2C_OP(fuse12, {
16831691
T2C_LLVM_GEN_STORE_IMM32(builder2, ir->pc + 4 + ir->imm2, addr_PC);
16841692
T2C_STORE_TIMER(builder2, start, insn_counter);
16851693
LLVMBuildRetVoid(builder2);
1694+
LLVMDisposeBuilder(builder2);
16861695
}
16871696
LLVMBasicBlockRef untaken = LLVMAppendBasicBlock(start, "untaken");
16881697
LLVMBuilderRef builder3 = LLVMCreateBuilder();
@@ -1695,6 +1704,7 @@ T2C_OP(fuse12, {
16951704
T2C_LLVM_GEN_STORE_IMM32(builder3, ir->pc + 8, addr_PC);
16961705
T2C_STORE_TIMER(builder3, start, insn_counter);
16971706
LLVMBuildRetVoid(builder3);
1707+
LLVMDisposeBuilder(builder3);
16981708
}
16991709
LLVMBuildCondBr(*builder, cmp, taken, untaken);
17001710
})

0 commit comments

Comments
 (0)