From a0891024fad5ac57fb6a9ad62d0839198c7b61af Mon Sep 17 00:00:00 2001 From: Shoaib Meenai Date: Mon, 16 Sep 2024 13:09:12 -0700 Subject: [PATCH] [CIR][Lowering] Erase op through rewriter instead of directly Directly erasing the op causes a use after free later on, presumably because the lowering framework isn't aware of the op being deleted. This fixes `clang/test/CIR/CodeGen/pointer-arith-ext.c` with ASAN. --- clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 880d1a4e3c51..6cb8121acdd3 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -592,7 +592,7 @@ class CIRPtrStrideOpLowering index.getLoc(), index.getType(), mlir::IntegerAttr::get(index.getType(), 0)), index); - sub->erase(); + rewriter.eraseOp(sub); } }