<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/70552>70552</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] [OpenMP] [mlir] crash with "Unhandled reduction container" and "UNREACHABLE executed"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir,
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Here is the reproducer, which is reduced and modified from https://github.com/gcc-mirror/gcc/blob/master/libgomp/testsuite/libgomp.fortran/lib1.f90.
```console
$ cat test.f90
use omp_lib
logical :: l
!$omp parallel reduction (.or.:l)
!$omp master
l = l .or. l
!$omp end master
!$omp end parallel
end
```
Printed message before crash:
```console
Unhandled reduction container
UNREACHABLE executed at /tmp/llvm-project/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp:1468!
```
Stack dump:
```console
#0 0x0000557a3c48a359 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
#1 0x0000557a3c48a9d4 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f8186b3b520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x00007f8186b8fa7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#4 0x00007f8186b8fa7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#5 0x00007f8186b8fa7c pthread_kill ./nptl/pthread_kill.c:89:10
#6 0x00007f8186b3b476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#7 0x00007f8186b217f3 abort ./stdlib/abort.c:81:7
#8 0x0000557a3c44eb52 llvm::install_out_of_memory_new_handler()
#9 0x0000557a3d5902d0 (anonymous namespace)::OpenMPDialectLLVMIRTranslationInterface::convertOperation(mlir::Operation*, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) const OpenMPToLLVMIRTranslation.cpp:0:0
#10 0x0000557a3da45f90 mlir::LLVM::ModuleTranslation::convertOperation(mlir::Operation&, llvm::IRBuilderBase&)
#11 0x0000557a3da46280 mlir::LLVM::ModuleTranslation::convertBlock(mlir::Block&, bool, llvm::IRBuilderBase&)
#12 0x0000557a3d59517b convertOmpOpRegions(mlir::Region&, llvm::StringRef, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&, mlir::LogicalResult&, llvm::SmallVectorImpl<llvm::PHINode*>*) OpenMPToLLVMIRTranslation.cpp:0:0
#13 0x0000557a3d596c7c void llvm::function_ref<void (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint)>::callback_fn<convertOmpMaster(mlir::Operation&, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&)::$_22>(long, llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint) OpenMPToLLVMIRTranslation.cpp:0:0
#14 0x0000557a3e67c99d llvm::OpenMPIRBuilder::EmitOMPInlinedRegion(llvm::omp::Directive, llvm::Instruction*, llvm::Instruction*, llvm::function_ref<void (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint)>, std::function<void (llvm::IRBuilderBase::InsertPoint)>, bool, bool, bool)
#15 0x0000557a3e67ddd3 llvm::OpenMPIRBuilder::createMaster(llvm::OpenMPIRBuilder::LocationDescription const&, llvm::function_ref<void (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint)>, std::function<void (llvm::IRBuilderBase::InsertPoint)>)
#16 0x0000557a3d58e0cf (anonymous namespace)::OpenMPDialectLLVMIRTranslationInterface::convertOperation(mlir::Operation*, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) const OpenMPToLLVMIRTranslation.cpp:0:0
#17 0x0000557a3da45f90 mlir::LLVM::ModuleTranslation::convertOperation(mlir::Operation&, llvm::IRBuilderBase&)
#18 0x0000557a3da46280 mlir::LLVM::ModuleTranslation::convertBlock(mlir::Block&, bool, llvm::IRBuilderBase&)
#19 0x0000557a3d59517b convertOmpOpRegions(mlir::Region&, llvm::StringRef, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&, mlir::LogicalResult&, llvm::SmallVectorImpl<llvm::PHINode*>*) OpenMPToLLVMIRTranslation.cpp:0:0
#20 0x0000557a3d594438 void llvm::function_ref<void (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint)>::callback_fn<convertOmpParallel(mlir::omp::ParallelOp, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&)::$_31>(long, llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint) OpenMPToLLVMIRTranslation.cpp:0:0
#21 0x0000557a3e679b76 llvm::OpenMPIRBuilder::createParallel(llvm::OpenMPIRBuilder::LocationDescription const&, llvm::IRBuilderBase::InsertPoint, llvm::function_ref<void (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint)>, llvm::function_ref<llvm::IRBuilderBase::InsertPoint (llvm::IRBuilderBase::InsertPoint, llvm::IRBuilderBase::InsertPoint, llvm::Value&, llvm::Value&, llvm::Value*&)>, std::function<void (llvm::IRBuilderBase::InsertPoint)>, llvm::Value*, llvm::Value*, llvm::omp::ProcBindKind, bool)
#22 0x0000557a3d58df74 (anonymous namespace)::OpenMPDialectLLVMIRTranslationInterface::convertOperation(mlir::Operation*, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) const OpenMPToLLVMIRTranslation.cpp:0:0
#23 0x0000557a3da45f90 mlir::LLVM::ModuleTranslation::convertOperation(mlir::Operation&, llvm::IRBuilderBase&)
#24 0x0000557a3da46280 mlir::LLVM::ModuleTranslation::convertBlock(mlir::Block&, bool, llvm::IRBuilderBase&)
#25 0x0000557a3da47670 mlir::LLVM::ModuleTranslation::convertOneFunction(mlir::LLVM::LLVMFuncOp)
#26 0x0000557a3da48974 mlir::LLVM::ModuleTranslation::convertFunctions()
#27 0x0000557a3da49dae mlir::translateModuleToLLVMIR(mlir::Operation*, llvm::LLVMContext&, llvm::StringRef)
#28 0x0000557a3c89f624 Fortran::frontend::CodeGenAction::generateLLVMIR()
#29 0x0000557a3c8a11ee Fortran::frontend::CodeGenAction::executeAction()
#30 0x0000557a3c4aad2c Fortran::frontend::FrontendAction::execute()
#31 0x0000557a3c4a1bc3 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&)
#32 0x0000557a3c4adb7e Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*)
#33 0x0000557a3c17213d fc1_main(llvm::ArrayRef<char const*>, char const*)
#34 0x0000557a3c171126 main
#35 0x00007f8186b22d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#36 0x00007f8186b22e40 call_init ./csu/../csu/libc-start.c:128:20
#37 0x00007f8186b22e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#38 0x0000557a3c170685 _start
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0 (https://github.com/llvm/llvm-project.git a8e0acf660639078a7e5341dd6ec82326d3b796b)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWktv3DgS_jX0hXBDot4HH9p2ehNsMgk8mbk2KLHUzTVFCiTlx79fkJK6Jdlp28Fk14tZIA-pVPzqSVaZZWoM30mAC5RcouT6jHZ2r_TF7TnVWt2bs1Kxx4uPoAFzg-0esIZWK9ZVoBG5wvd7Xu3dJw2OxjCVDDeK8ZoDw7VWDd5b2xoUrRHZILLZcbvvylWlGvdSVecN11rp_gWRTSlUicimocY6CRvBy51qWkQ2Fow1HbdwpK5qpa2msqeEq7oIVii4RsF6-DcN-j-VkkYJGKgkxhW12AG6JT0V484AVk27FbycgmAs1I5XVGBnRLTGYiaChIjEqmlxSzUVAkTvCsuVxIjkK6VXKFoLRIrlgsHGUQhG0TUW2C04iDjwgnPrhH_-ZRQ9VQwkWzhh-vWb5tICww0YQ3eAS6iVBlxpavbOzBPu-0PuqWQC2MTQSklLuRy1--O3mw_rq4_ry88fMDxA1TlR1GIXRR9LIe6a81arf0FlXbQFH2KNyOY71Ttw1M-f__zy6QaRzTWnomf82oL88u3w8F31PN81lUZQp8qqalsUrcM4zZ2PfuyB3y2tbjHrmvYFezEiUYCDhyAIgiTJaFTFOY2SAjsj-pQwj6Z_8G71yN81rQCR_Mik6f1WGauBNoikbvNwaREp8FFMuBRTsBj_zneSio_e5xqRfFjVk81gb-D_HoDIAJTVeZinZVQmJHDZeHDyQ55u0_hccNk9nO9k13-oVkatUkQug4eYJCQ4JK3DjOaYeU2zCm-3rd1roGx7y4XY8qYV0IC0PhZ4hchGtlYgspmyrSoUreMYRessPeLHr8GXFrSk4iRylrsEmHgjeQ55uuwkXF4s4NKlc-MsxTvj4-GR-kdENiv_9mgYtMZBK8MfENloyg14bJKhaD3xQTaHJmFWR5iWStse2LI-fJ7Uaxc6i48I-TyFYigTMslULo2lQmxVZ7eq3jbQKP24lXC_3R8SbJ6TxRSQJUVAmE8lKpV8bFRnsKQNmNane9FL6XfnsG2fbNFPLoi14_fMlZJ3oO3XFrT_jEjuz4MRaaSu3ZY5WvLp5rLjgoG-pAaGDXVc54T2T18U6wRMxHvewh1ZxuKXzpHJvnL7c3YOMBondRG8UuqbbE1fsnWMkFMqXCiVkvxnlLoUqrqdKTRQvDKlUuItSpFF2iRhVuLR_Kb92t7AjitpZgJ72hPzf7eay90N1H9lBsx4-wJ_A6YT9qn4hgrxJ1RW6U9NK1B0dfz27eOn3xQDl53RB5-jxVtzKlp4Kq2yCt8pziYq1J30hXaroUbRlf86Ky5zX_QkaUDbb8rXix_77Slv4UzpM4MKUdLqdltLFF0do_dl6M5-MnnftFH7j4jEW0K8j3Oh5O5tFr3J-rfGL57GD9KsKopp6Hq0g9Se-KHh9uuXb5-k4BLYmPaTeKq-LYnW11xDZfkdLKyQxuq--Xp6Mp749p9PJHKFjWVz6T8leUQbT6L5_9OzJ1lEhDEWvRSRSgO1cEjsF7g_q8pnxDWYSvN27IHN08Pjf97hxdGv6fykyiGo6r9tK5C9x1Ygf4-twLKD_H8r8IOcIsHCU3Ec5e-8Ffg2Xj1Mg3eoXuPXr-0v6gmi8D32BCRcVKCizNLXVaCJP_-yGvQWV_xX6tUPxb8W6tepOOX9k4oOnnj3JHU9JuwvaISeE_Yy9bg3taouuWT_5JI920eRxc9wOauz-O9a70n0Dus9id9hvSfJQqkszX7KUxI24zaZqnZc754ci6suUwXShQJ5kcU_ocAo3czuxJyAZe9XMAoTAXYAhAFfjTfZr8pux3ylpIWHZ_qPY_sz1Wd-6ZcXdUpivBlmI_2Box2iHI6fK8XgHyDX1dHmHUinEBxUnUso5hJoGAK8UcIwCFiPEZ0JWN6wU8pIdUrAZnh7RsIT7MW1Og3LKjqtfNNyAdr9IE3leFgt9X-9cosNEpGFPqzMTjpzkHxU624o_ae1eGJG35Me9ZgdaVWYkTBiuK7CbUP5_DpirTV9vPEludpTPfYZ66ESzWkzGfFCRhiSFDv8Cc_ifp4QVgR4uxW8rLbGUm23rvv0Wvlr8Mp0Ty_Xh-v75xat9ihaJ34qkB6lpkupEAfYr-GS26Wg_tGhn3t0f_keEgdKjlXiyQW-B52Z8pwVz4JHmSupyRE7X7gySPME96g9Uy2o3J1LuEfRGoMfq0Zr3ElaCsBWjaM4XKmmoT5L8LpU2gI7td5T8Zha42JcUy6AYdZ56GH6gUjeGcDnd54GgPkkV4uFFHwH2riuNcxXwcoPFU7Min0yzieHqx23mOYQ0KpO0yCNiiDLaQZJFIeMpVDlrhiwqMyKtDzIH-aL0RoPQ7BO3kp1LyfDsJ7Pz4FwoxgIx91Pb-aDwjN2EbEiKugZXIRpkcdFnObF2f4iyIMgD4qyDOIsC5IQYpIRFsWQ0CgidX7GL0hAojAgeUiCOC5WcZaVUZ4UeR6yOIgoigNoKBcrZ_FK6d0ZN6aDiyxIEnImaAnC-KE9If34lCByhQjx7nVvyfWZvvDuKrudQXEguLHmCGe5FX7s369IrjFKLocBa__icZPrfiqM77ndY0TI6fkvIf5XABzfM0NgRMhZp8XF2-KMyMbb7ra5N__fAQAA__8IffQY">