[llvm-dev] Error Calling eraseFromParent()

Ahmad Nouralizadeh via llvm-dev llvm-dev at lists.llvm.org
Tue Aug 7 13:26:43 PDT 2018


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.

On Tue, Aug 7, 2018 at 8:11 PM, <paul.robinson at sony.com> wrote:

> LLVMSymbolizer is invoked while trying to pretty-print a crash backtrace.
> "error reading file" suggests that you are on Windows and it cannot find
> the .pdb file with symbol information.
>
> If that's the case, are you doing either a Debug or RelWithDebInfo build?
> If you are, I don't know what else to suggest.
>
>
>
> Note that LLVMSymbolizer is trying to make the traceback more
> understandable; it has nothing to do with the cause of your problem.  If
> you are triggering an assertion, the assertion message should tell you
> where that is.  (You did run cmake with –DLLVM_ENABLE_ASSERTIONS=ON,
> right?)  If not, likely you are dereferencing a null pointer somewhere.
> Personally I debug with 'printf' statements, but that's just me.
>
> --paulr
>
>
>
> *From:* llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of *Ahmad
> Nouralizadeh via llvm-dev
> *Sent:* Tuesday, August 07, 2018 11:03 AM
> *To:* llvm-dev at lists.llvm.org
> *Subject:* [llvm-dev] Error Calling eraseFromParent()
>
>
>
> Hi.
>
> This is part of my code:
>
> ...
>
> if (auto* op = dyn_cast<BinaryOperator>(&I)) {
>
>    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();
>
> }
>
> ...
>
> This leads to the following runtime error:
>
> LLVMSymbolizer: error reading file: No such file or directory
>
> ...
>
> Does anybody know the solution?
>
> Regards.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180808/c96b2204/attachment.html>


More information about the llvm-dev mailing list