How to remove some operation?

I have a mlir file like:

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:

Stack dump:
0.      Program arguments: ./build/bin/standalone-opt test/Standalone/fib_raw.mlir --derecursion -o test/Standalone/fib_pass.mlir
 #0 0x00005642b98469f7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/saltyfish/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:13
 #1 0x00005642b9844cd0 llvm::sys::RunSignalHandlers() /home/saltyfish/src/llvm-project/llvm/lib/Support/Signals.cpp:105:18
 #2 0x00005642b98471ca SignalHandler(int) /home/saltyfish/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:412:1
 #3 0x00007f5566966f90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
 #4 0x00005642b97d81d0 mlir::Region::getParentRegion() /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:46:3
 #5 0x00005642b97d81d0 mlir::Region::isProperAncestor(mlir::Region*) /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:54:26
 #6 0x00005642b97e3336 diagnoseInvalidOperandDominance(mlir::Operation&, unsigned int) /home/saltyfish/src/llvm-project/mlir/lib/IR/Verifier.cpp:297:14 
 #7 0x00005642b97e3336 (anonymous namespace)::OperationVerifier::verifyDominanceOfContainedRegions(mlir::Operation&, mlir::DominanceInfo&) /home/saltyfish/src/llvm-project/mlir/lib/IR/Verifier.cpp:347:13
 #8 0x00005642b97e1f4b (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /home/saltyfish/src/llvm-project/mlir/lib/IR/Verifier.cpp:87:16
 #9 0x00005642b97e1f4b mlir::verify(mlir::Operation*, bool) /home/saltyfish/src/llvm-project/mlir/lib/IR/Verifier.cpp:376:19
#10 0x00005642b975a9d8 mlir::LogicalResult::failed() const /home/saltyfish/src/llvm-project/mlir/include/mlir/Support/LogicalResult.h:44:33
#11 0x00005642b975a9d8 mlir::failed(mlir::LogicalResult) /home/saltyfish/src/llvm-project/mlir/include/mlir/Support/LogicalResult.h:72:58
#12 0x00005642b975a9d8 verifyOpAndAdjustFlags(mlir::Operation*, mlir::OpPrintingFlags) /home/saltyfish/src/llvm-project/mlir/lib/IR/AsmPrinter.cpp:1785:7
#13 0x00005642b975a9d8 mlir::AsmState::AsmState(mlir::Operation*, mlir::OpPrintingFlags const&, llvm::DenseMap<mlir::Operation*, std::pair<unsigned int,
 unsigned int>, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, std::pair<unsigned int, unsigned int>>>*, mlir::FallbackAsmResourceMap*) /home/saltyfish/src/llvm-project/mlir/lib/IR/AsmPrinter.cpp:1798:15
#14 0x00005642b97610c8 mlir::Operation::print(llvm::raw_ostream&, mlir::OpPrintingFlags const&) /home/saltyfish/src/llvm-project/mlir/lib/IR/AsmPrinter.cpp:3661:3
#15 0x00005642b97b20a9 mlir::Diagnostic::appendOp(mlir::Operation&, mlir::OpPrintingFlags const&) /home/saltyfish/src/llvm-project/mlir/lib/IR/Diagnostics.cpp:0:6
#16 0x00005642b97b1f9a mlir::Diagnostic::operator<<(mlir::Operation&) /home/saltyfish/src/llvm-project/mlir/lib/IR/Diagnostics.cpp:138:3
#17 0x00005642b97cd3ff mlir::Diagnostic::operator<<(char const*) /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/Diagnostics.h:188:5
#18 0x00005642b97cd3ff mlir::Operation::~Operation() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:145:63
#19 0x00005642b97cdbd0 mlir::Operation::destroy() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:170:3
#20 0x00005642b97cdbd0 llvm::ilist_traits<mlir::Operation>::deleteNode(mlir::Operation*) /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:370:7
#21 0x00005642b977421e 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/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:270:5        
#22 0x00005642b97737d8 llvm::PointerIntPair<llvm::ilist_node_base<true>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true>*>, l
lvm::PointerIntPairInfo<llvm::ilist_node_base<true>*, 1u, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true>*>>>::getPointer() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:60:58
#23 0x00005642b97737d8 llvm::ilist_node_base<true>::getPrev() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node_base.h:42:61      
#24 0x00005642b97737d8 llvm::ilist_node_impl<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>>::getPrev() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node.h:71:59
#25 0x00005642b97737d8 llvm::ilist_sentinel<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>>::empty() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node.h:249:45
#26 0x00005642b97737d8 llvm::simple_ilist<mlir::Operation>::empty() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/simple_ilist.h:131:54  
#27 0x00005642b97737d8 mlir::Block::empty() /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/Block.h:137:36
#28 0x00005642b97737d8 mlir::Block::clear() /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/Block.h:41:13
#29 0x00005642b97737d8 mlir::Block::~Block() /home/saltyfish/src/llvm-project/mlir/lib/IR/Block.cpp:21:3
#30 0x00005642b97d8ed6 llvm::ilist_alloc_traits<mlir::Block>::deleteNode(mlir::Block*) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:42:39
#31 0x00005642b97d8ed6 llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::erase(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false>) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:269:5
#32 0x00005642b97d80cb llvm::operator!=(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false> const&, llv
m::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false> const&) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_iterator.h:148:24
#33 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::erase(llvm::ilist_iterator<llvm::ilist_detai
l::node_options<mlir::Block, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false>) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:305:18
#34 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::clear() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:310:18
#35 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::~iplist_impl() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:211:20
#36 0x00005642b97d80cb mlir::Region::~Region() /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:20:1
#37 0x00005642b97cd2e8 mlir::Operation::~Operation() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:159:21
#38 0x00005642b97cdbd0 mlir::Operation::destroy() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:170:3
#39 0x00005642b97cdbd0 llvm::ilist_traits<mlir::Operation>::deleteNode(mlir::Operation*) /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:370:7
#40 0x00005642b977421e 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/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:270:5        
#41 0x00005642b97737d8 llvm::PointerIntPair<llvm::ilist_node_base<true>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true>*>, l
lvm::PointerIntPairInfo<llvm::ilist_node_base<true>*, 1u, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true>*>>>::getPointer() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:60:58
#42 0x00005642b97737d8 llvm::ilist_node_base<true>::getPrev() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node_base.h:42:61      
#43 0x00005642b97737d8 llvm::ilist_node_impl<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>>::getPrev() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node.h:71:59
#44 0x00005642b97737d8 llvm::ilist_sentinel<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>>::empty() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_node.h:249:45
#45 0x00005642b97737d8 llvm::simple_ilist<mlir::Operation>::empty() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/simple_ilist.h:131:54  
#46 0x00005642b97737d8 mlir::Block::empty() /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/Block.h:137:36
#47 0x00005642b97737d8 mlir::Block::clear() /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/Block.h:41:13
#48 0x00005642b97737d8 mlir::Block::~Block() /home/saltyfish/src/llvm-project/mlir/lib/IR/Block.cpp:21:3
#49 0x00005642b97d8ed6 llvm::ilist_alloc_traits<mlir::Block>::deleteNode(mlir::Block*) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:42:39
#50 0x00005642b97d8ed6 llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::erase(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false>) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:269:5
#51 0x00005642b97d80cb llvm::operator!=(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false> const&, llv
m::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false> const&) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist_iterator.h:148:24
#52 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::erase(llvm::ilist_iterator<llvm::ilist_detai
l::node_options<mlir::Block, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false>) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:305:18
#53 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::clear() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:310:18
#54 0x00005642b97d80cb llvm::iplist_impl<llvm::simple_ilist<mlir::Block>, llvm::ilist_traits<mlir::Block>>::~iplist_impl() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/ilist.h:211:20
#55 0x00005642b97d80cb mlir::Region::~Region() /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:20:1
#56 0x00005642b97cd2e8 mlir::Operation::~Operation() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:159:21
#57 0x00005642b97cdd36 mlir::Operation::destroy() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:170:3
#58 0x00005642b97cdd36 mlir::Operation::erase() /home/saltyfish/src/llvm-project/mlir/lib/IR/Operation.cpp:421:5
#59 0x00005642b96db3da llvm::DenseMap<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>, llvm::Den
seMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>>>::getNumBuckets() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/DenseMap.h:861:12
#60 0x00005642b96db3da llvm::DenseMapBase<llvm::DenseMap<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResource
Parser>>, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_d
elete<mlir::AsmResourceParser>>>>, llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>, llvm::DenseM
apInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>>>::getNumBuckets() const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/DenseMap.h:525:49
#61 0x00005642b96db3da llvm::DenseMapBase<llvm::DenseMap<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResource
Parser>>, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_d
elete<mlir::AsmResourceParser>>>>, llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>, llvm::DenseM
apInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>>>::destroyAll() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/DenseMap.h:361:9
#62 0x00005642b96db3da llvm::DenseMap<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>, llvm::Den
seMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unique_ptr<mlir::AsmResourceParser, std::default_delete<mlir::AsmResourceParser>>>>::~DenseMap() /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/DenseMap.h:754:11
#63 0x00005642b96db3da mlir::ParserConfig::~ParserConfig() /home/saltyfish/src/llvm-project/mlir/include/mlir/IR/AsmState.h:458:7
#64 0x00005642b96db3da performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:106:1
#65 0x00005642b96daf5e processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool,
 bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:139:12
#66 0x00005642b96daf5e mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::functio
n_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm
::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:181:12
#67 0x00005642b96daf5e mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryB
uffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuf
fer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::
unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#68 0x00005642b97f281a llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_o
stream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/saltyfish/src/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#69 0x00005642b97f281a mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir
::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /home/saltyfish/src/llvm-project/mlir/lib/Support/ToolUtilities.cpp:28:12
#70 0x00005642b96d9832 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::functio
n_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:186:10
#71 0x00005642b96d9cbe mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPip
elineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:209:10
#72 0x00005642b96d9cbe mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /home/saltyfish/src/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:306:14
#73 0x00005642b9499a5a main /home/saltyfish/workspace/project/mlir/standalone/standalone-opt/standalone-opt.cpp:42:7
#74 0x00007f556695218a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#75 0x00007f5566952245 call_init ./csu/../csu/libc-start.c:128:20
#76 0x00007f5566952245 __libc_start_main ./csu/../csu/libc-start.c:368:5
#77 0x00005642b9499911 _start (./build/bin/standalone-opt+0x1da911)
Segmentation fault

How should I do?

I know I should change return %1:i32, but how?

The first question is: what are you gonna replace the use of %1 with? To be able to remove an operation it needs to

        op->remove();

Try: op->erase(); instead.

But it show:

Stack dump:
0.      Program arguments: ./build/bin/standalone-opt test/Standalone/fib_raw.mlir --derecursion -o test/Standalone/fib_pass.mlir
 #0 0x00005642b98469f7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/saltyfish/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:13
 #1 0x00005642b9844cd0 llvm::sys::RunSignalHandlers() /home/saltyfish/src/llvm-project/llvm/lib/Support/Signals.cpp:105:18
 #2 0x00005642b98471ca SignalHandler(int) /home/saltyfish/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:412:1
 #3 0x00007f5566966f90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
 #4 0x00005642b97d81d0 mlir::Region::getParentRegion() /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:46:3
 #5 0x00005642b97d81d0 mlir::Region::isProperAncestor(mlir::Region*) /home/saltyfish/src/llvm-project/mlir/lib/IR/Region.cpp:54:26
 #6 0x00005642b97e3336 diagnoseInvalidOperandDominance(mlir::Operation&, unsigned int) /home/saltyfish/src/llvm-project/mlir/lib/IR/Verifier.cpp:297:14 
 #7 0x00005642b97

We should never crash in the verifier, that’s a bug in MLIR, do you have some ways for me to repro maybe?

Oh, I solve it. Just the return %1 not changed. Just change it

Wait, this crash isn’t mlir-opt feature? I will ask an issue on github

No this crash should not happen: we should issue a proper error instead.
Even if you do something unexpected, the role of the verifier is to be able to check it and find issues.
(ok there are limits: we can detect inconsistencies in the IR, and we can check for nullptr, but replacing a pointer in a linked list with 0x1234568 will make the verifier crash)

I have report it in github. I give a minimal repo

Thanks, unfortunately this backtrace isn’t the same as above and does not initiate from the verifier.

I wonder if you didn’t add a print in ~Operator() for debugging and that’s the backtrace you posted?

It’s because I don’t change return %1. (For answering someone else meet it