[llvm-dev] Error Calling eraseFromParent()
Ahmad Nouralizadeh via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 7 16:54:42 PDT 2018
Thanks Bjorn! But The problem is still there.
On Wed, Aug 8, 2018 at 2:04 AM, Björn Pettersson A <
bjorn.a.pettersson at ericsson.com> wrote:
> It looks quite dangerous to erase the instruction I inside the loop when
> iterating over all instructions in the function.
> I guess it depends on how the range based iterator is implemented if that
> works or not.
>
> I think that you, for example, can change the range based iteration
>
> for (auto &I : instructions(F))
>
> into something like this
>
> for (inst_iterator It = inst_begin(&F), Ie = inst_end(&F); It != Ie;) {
> Instruction *I = &*(It++);
> ...
> }
>
> That will make sure that you step the iterator before modifying the data
> structure you iterate over.
>
> Regards,
> Björn
> ________________________________________
> From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Ahmad
> Nouralizadeh via llvm-dev <llvm-dev at lists.llvm.org>
> Sent: Tuesday, August 7, 2018 22:26
> To: paul.robinson at sony.com
> Cc: llvm-dev at lists.llvm.org
> Subject: Re: [llvm-dev] Error Calling eraseFromParent()
>
> The code is really simple. But I can not the reason for the segmentation
> fault. I only know that the eraseFromParent() function leads to it. The
> whole code is:
> ...
> bool runOnFunction(Function &F) override {
>
> for (auto &I : instructions(F)) {
>
> if (auto* op = dyn_cast<BinaryOperator>(&I)) {
> IRBuilder<> builder(op);
>
> Value* lhs = op->getOperand(0);
> Value* rhs = op->getOperand(1);
> Value* mul = builder.CreateMul(lhs, rhs);
>
> for (auto& U : op->uses()) {
> User* user = U.getUser();
> user->setOperand(U.getOperandNo(), mul);
> }
>
> I.eraseFromParent();
> }
>
> }
> ...
> And I think that the code worked well with LLVM-3.6.0 that I tested one
> year ago. Now, I use LLVM-6.0.0.
> Regards.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180808/9d592482/attachment.html>
More information about the llvm-dev
mailing list