Issue 60723
Summary MLIR crash strangely
Labels new issue
Assignees
Reporter hushanjushi
    I'm making a MLIR Pass. But I meet a strange crash when the mlir-opt report error(the pass is not work correctly).

I have a mlir file like:
```mlir
func.func @r_fib(%arg0: i32) -> i32 attributes {llvm.linkage = #llvm.linkage<external>} {
  %c1_i32 = arith.constant 1 : i32
  %c2_i32 = arith.constant 2 : i32
  %0 = arith.cmpi sle, %arg0, %c1_i32 : i32
  %1 = scf.if %0 -> (i32) {
    scf.yield %c1_i32 : i32
  } else {
 scf.yield %c2_i32 : i32
  }
  return %1 : i32
}
```
I want get a pass to replace IfOp with other Op. So I want to remove it first.
```
void MyPass::runOnOperation() {
    func::FuncOp func {getOperation()};
 func.walk([&](mlir::Operation *operation) {
        scf::IfOp op = llvm::dyn_cast<scf::IfOp>(operation);
        if (!op)
 return;
        op->remove();
        }
    );
}
```
But it show:
```
LLVM ERROR: operation destroyed but still has uses
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x000056479ce32a27 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/user/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:13
 #1 0x000056479ce30d00 llvm::sys::RunSignalHandlers() /home/user/src/llvm-project/llvm/lib/Support/Signals.cpp:105:18
 #2 0x000056479ce331fa SignalHandler(int) /home/user/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:412:1
 #3 0x00007f6e02a89f90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
 #4 0x00007f6e02ad8ccc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f6e02a89ef2 raise ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007f6e02a74472 abort ./stdlib/abort.c:81:7
 #7 0x000056479ce0306b llvm::report_fatal_error(llvm::Twine const&, bool) /home/user/src/llvm-project/llvm/lib/Support/ErrorHandling.cpp:125:5
 #8 0x000056479ce02eb6 (./build/bin/standalone-opt+0x1468eb6)
 #9 0x000056479cdb5295 mlir::InFlightDiagnostic::attachNote(std::optional<mlir::Location>) /home/user/src/llvm-project/mlir/include/mlir/IR/Diagnostics.h:347:5
#10 0x000056479cdb5295 mlir::Operation::~Operation() /home/user/src/llvm-project/mlir/lib/IR/Operation.cpp:145:14
#11 0x000056479cdb5a80 mlir::Operation::destroy() /home/user/src/llvm-project/mlir/lib/IR/Operation.cpp:170:3
#12 0x000056479cdb5a80 llvm::ilist_traits<mlir::Operation>::deleteNode(mlir::Operation*) /home/user/src/llvm-project/mlir/lib/IR/Operation.cpp:370:7
#13 0x000056479cd5472e llvm::iplist_impl<llvm::simple_ilist<mlir::Operation>, llvm::ilist_traits<mlir::Operation>>::erase(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>) /home/user/src/llvm-project/llvm/include/llvm/ADT/ilist.h:270:5
#14 0x000056479cdcee4e mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) /home/user/src/llvm-project/mlir/lib/IR/Visitors.cpp:0:9
#15 0x000056479cc3090b (anonymous namespace)::DerecursionPass::runOnOperation() /home/user/workspace/project/mlir/standalone/lib/Standalone/Passes/Derecursion.cpp:147:1
#16 0x000056479ccc5823 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/user/src/llvm-project/mlir/lib/Pass/Pass.cpp:0:11
#17 0x000056479ccc5bf8 mlir::LogicalResult::failed() const /home/user/src/llvm-project/mlir/include/mlir/Support/LogicalResult.h:44:33
#18 0x000056479ccc5bf8 mlir::failed(mlir::LogicalResult) /home/user/src/llvm-project/mlir/include/mlir/Support/LogicalResult.h:72:58
#19 0x000056479ccc5bf8 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/user/src/llvm-project/mlir/lib/Pass/Pass.cpp:534:9
#20 0x000056479cccb9d5 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /home/user/src/llvm-project/mlir/lib/Pass/Pass.cpp:759:5
#21 0x000056479cccb9d5 mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&)::'lambda'()::operator()() const /home/user/src/llvm-project/mlir/include/mlir/IR/Threading.h:62:18
#22 0x000056479cccb9d5 __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>> std::__invoke_impl<void, mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&)::'lambda'()&>(std::__invoke_other, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14
#23 0x000056479cccb9d5 std::enable_if<is_invocable_r_v<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>>::type std::__invoke_r<void, mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&)::'lambda'()&>(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:111:2
#24 0x000056479cccb9d5 std::_Function_handler<void (), mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&)::'lambda'()>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_function.h:290:9
#25 0x000056479cccb196 std::__shared_ptr<std::promise<void>, (__gnu_cxx::_Lock_policy)2>::get() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:1666:16
#26 0x000056479cccb196 std::__shared_ptr_access<std::promise<void>, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:1363:66
#27 0x000056479cccb196 std::__shared_ptr_access<std::promise<void>, (__gnu_cxx::_Lock_policy)2, false, false>::operator->() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:1357:9
#28 0x000056479cccb196 llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()::operator()() const /home/user/src/llvm-project/llvm/include/llvm/Support/ThreadPool.h:136:15
#29 0x000056479cccb196 void std::__invoke_impl<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()&>(std::__invoke_other, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14
#30 0x000056479cccb196 std::enable_if<is_invocable_r_v<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()&>, void>::type std::__invoke_r<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()&>(llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:111:2
#31 0x000056479cccb196 std::_Function_handler<void (), llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::'lambda'()>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_function.h:290:9
#32 0x000056479ce16561 llvm::ThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /home/user/src/llvm-project/llvm/lib/Support/ThreadPool.cpp:102:5
#33 0x000056479ce17003 std::default_delete<std::tuple<llvm::ThreadPool::grow(int)::$_0>>::operator()(std::tuple<llvm::ThreadPool::grow(int)::$_0>*) const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/unique_ptr.h:95:2
#34 0x000056479ce17003 std::unique_ptr<std::tuple<llvm::ThreadPool::grow(int)::$_0>, std::default_delete<std::tuple<llvm::ThreadPool::grow(int)::$_0>>>::~unique_ptr() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/unique_ptr.h:396:4
#35 0x000056479ce17003 void llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::$_0>>(void*) /home/user/src/llvm-project/llvm/include/llvm/Support/thread.h:46:3
#36 0x000056479ce17003 void* llvm::thread::ThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::$_0>>(void*) /home/user/src/llvm-project/llvm/include/llvm/Support/thread.h:55:5
#37 0x00007f6e02ad6fd4 start_thread ./nptl/pthread_create.c:442:8
#38 0x00007f6e02b5766c clone3 ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:83:0
Aborted
```
My Clang version is 16.0.0.(release-rc), builder option is:(build clang is Debian apt source,15.0.7)
```
cmake -G Ninja -S "/home/user/src/llvm-project/llvm" -DLLVM_ENABLE_PROJECTS="clang;mlir" -DLLVM_TARGETS_TO_BUILD="host"   -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="/home/user/workspace/project/mlir/installed" -DCMAKE_C_COMPILER=clang    -DCMAKE_CXX_COMPILER=clang++ -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_ASSERTIONS=ON  -DLLVM_CCACHE_BUILD=ON -DCMAKE_CXX_STANDARD=17 -DLLVM_INSTALL_UTILS=ON -DLLVM_ENABLE_BINDINGS=OFF -DLLVM_ENABLE_IDE=ON -DLLVM_BUILD_EXAMPLES=ON
```
standalone build option is:
```
cmake -G Ninja .. -DMLIR_DIR=/home/user/workspace/project/mlir/build/lib/cmake/mlir -DLLVM_EXTERNAL_LIT=/home/user/workspace/project/mlir/build/bin/llvm-lit -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++  -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to