Skip to content

Commit

Permalink
[CIR][Transforms][Bugfix] Do not use-after-free in MergeCleanups.
Browse files Browse the repository at this point in the history
  • Loading branch information
yugr committed Jan 9, 2024
1 parent 7cf3119 commit ffcc114
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions clang/lib/CIR/Dialect/Transforms/MergeCleanups.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,16 @@ struct MergeTrivialConditionalBranches : public OpRewritePattern<BrCondOp> {
void rewrite(BrCondOp op, PatternRewriter &rewriter) const final {
auto constOp = llvm::cast<ConstantOp>(op.getCond().getDefiningOp());
bool cond = constOp.getValue().cast<cir::BoolAttr>().getValue();
auto *destTrue = op.getDestTrue(), *destFalse = op.getDestFalse();
Block *block = op.getOperation()->getBlock();

rewriter.eraseOp(op);
if (cond) {
rewriter.mergeBlocks(op.getDestTrue(), block);
rewriter.eraseBlock(op.getDestFalse());
rewriter.mergeBlocks(destTrue, block);
rewriter.eraseBlock(destFalse);
} else {
rewriter.mergeBlocks(op.getDestFalse(), block);
rewriter.eraseBlock(op.getDestTrue());
rewriter.mergeBlocks(destFalse, block);
rewriter.eraseBlock(destTrue);
}
}
};
Expand Down

0 comments on commit ffcc114

Please sign in to comment.