<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/148697>148697</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Flang OpenMP: compiler segfaults when using explicit target and teams region updating same variable outside of do loop.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          scamp-nvidia
      </td>
    </tr>
</table>

<pre>
    Testing flang with SPEC Accel OMP in a multicore compilation highlighted the following issue where the compiler segfaults during compilation of an openmp region. 
test.f90:
```
program crash_repro
  implicit none
  real :: a(10, 70, 10)
  integer :: i, j, k, n

    n = 1
    a = 0
    !$omp target
     !$omp teams
      !$omp distribute parallel do collapse(2)
 do i = 1,10
          do j = 1,10
            do k = 1,10
 a(k,57,n) = a(k,57,n) - 0.5
            end do
          end do
 end do
        a(1,57,n) = a(2,57,n)
      !$omp end teams
      !$omp end target

end program crash_repro
```
Backtrace from compilation with a recent upstream Flang:
```
scamp@dev-sky5:/local/home/scamp/551.ppalm_0$ flang --version
flang version 21.0.0git (https://github.com/llvm/llvm-project b54cfa46a7eba293b6f2086856a36cc553444939)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /proj/nv/llvm/Linux_x86_64/llvm-5551/bin
Build config: +assertions
scamp@dev-sky5:/local/home/scamp/551.ppalm_0$ flang test.f90 -o test -fopenmp -fopenmp-version=50
warning: OpenMP support for version 50 in flang is still incomplete
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -fopenmp -fopenmp-version=50 -resource-dir /proj/nv/llvm/Linux_x86_64/llvm-5551/lib/clang/21 -mframe-pointer=all -o /tmp/test-667a08.o -x f95 test.f90
 #0 0x0000000004e494b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4e494b8)
 #1 0x0000000004e46354 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x00000befa6a45320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
 #3 0x0000000009922ba1 llvm::OpenMPIRBuilder::calculateCanonicalLoopTripCount(llvm::OpenMPIRBuilder::LocationDescription const&, llvm::Value*, llvm::Value*, llvm::Value*, bool, bool, llvm::Twine const&) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x9922ba1)
 #4 0x0000000006dc51a8 convertOmpTarget(mlir::Operation&, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) OpenMPToLLVMIRTranslation.cpp:0:0
 #5 0x0000000006ddbb6a convertHostOrTargetOperation(mlir::Operation*, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) OpenMPToLLVMIRTranslation.cpp:0:0
 #6 0x0000000006ddc8ce (anonymous namespace)::OpenMPDialectLLVMIRTranslationInterface::convertOperation(mlir::Operation*, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) const OpenMPToLLVMIRTranslation.cpp:0:0
 #7 0x0000000008b00fae mlir::LLVM::ModuleTranslation::convertOperation(mlir::Operation&, llvm::IRBuilderBase&, bool) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x8b00fae)
 #8 0x0000000008b0acf7 mlir::LLVM::ModuleTranslation::convertBlockImpl(mlir::Block&, bool, llvm::IRBuilderBase&, bool) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x8b0acf7)
 #9 0x0000000008b0c6f8 mlir::LLVM::ModuleTranslation::convertOneFunction(mlir::LLVM::LLVMFuncOp) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x8b0c6f8)
#10 0x0000000008b0d914 mlir::LLVM::ModuleTranslation::convertFunctions() (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x8b0d914)
#11 0x0000000008b179b5 mlir::translateModuleToLLVMIR(mlir::Operation*, llvm::LLVMContext&, llvm::StringRef, bool) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x8b179b5)
#12 0x0000000004ea9bef Fortran::frontend::CodeGenAction::generateLLVMIR() (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4ea9bef)
#13 0x0000000004eae458 Fortran::frontend::CodeGenAction::executeAction() (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4eae458)
#14 0x0000000004e8fddd Fortran::frontend::FrontendAction::execute() (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4e8fddd)
#15 0x0000000004e6cc0b Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4e6cc0b)
#16 0x0000000004e98d67 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4e98d67)
#17 0x0000000004767220 fc1_main(llvm::ArrayRef<char const*>, char const*) (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4767220)
#18 0x00000000047668f8 main (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x47668f8)
#19 0x00000befa6a2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#20 0x00000befa6a2a28b call_init ./csu/../csu/libc-start.c:128:20
#21 0x00000befa6a2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#22 0x0000000004764f6e _start (/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang+0x4764f6e)
flang-21: error: unable to execute command: Segmentation fault
flang-21: error: flang frontend command failed due to signal (use -v to see invocation)
```
"crash reproducer file" generated:
```
# Crash reproducer for clang version 21.0.0git (https://github.com/llvm/llvm-project b54cfa46a7eba293b6f2086856a36cc553444939)
# Driver args: "test.f90" "-o" "test" "-fopenmp" "-fopenmp-version=50"
# Original command: "/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-fopenmp" "-fopenmp-version=50" "-resource-dir" "/proj/nv/llvm/Linux_x86_64/llvm-5551/lib/clang/21" "-mframe-pointer=all" "-o" "/tmp/test-667a08.o" "-x" "f95" "test.f90"
 "/proj/nv/llvm/Linux_x86_64/llvm-5551/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-fopenmp" "-fopenmp-version=50" "-mframe-pointer=all" "-x" "f95" "test-13da17"
```

Note that if I remove the second update of "a" after the triply nested do loop, the code doesn't crash. Also note that if instead of an explicit target region and teams region, I make th
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWU9v27gS_zTKZSBDov5YOuTgJPXbAO1rsQ32GlDUyGZDkQJJOcm3fyBFR7aTdpvW2L28oE3EITXz-80Mh9KIGsM3EvEyKq6i4uaCjnar9KVhtB9iueMtpxeNap8v79BYLjfQCSo38MjtFr5--XANK8ZQwOdPX4BLoNCPwnKmNAJT_cAFtVxJ2PLNVvDN1mILdovQKSHUo1PHjRkRHreo0c9Md6EGg5uOjsIaaEftVh7qUx1QCWpA2Q-gccOVXECUrCwau-jqJMpWUbKKyiT8S1aDVhtNe2Camu29xkGrKFkB8H4QnHELUkn0Eo1UgFOQrYBGpEqTiFzD0v921_V0n7S4Qb1fyN3sN_frwf2SzrpbBiAhym4gDSPqR0kYRSSNSK76ASzVG7RBfChH2pu9-EDecmM1b0aLMFBNhUABrQKmhKCDwYhUJCBtFfAAgVynyYsu99Mq-Pa9OT_7cDLr_OEIFsuIXMuI1H7-tTSGZFGcqEPZQquOhLPo1aT3_JuWyKH0Ddc4Vd9zm5_buzpKVm78dmYc5s4VZQ9WU4bQadUfJaLfBxQ0MpQWxsFYjbSHtdskr5PQ76ooT1rcxebhuXAryFooRkVE1lvVY0TW0yKyLop0MQxU9PdJRPKw7-J4h9pw5RJskoQxkHSRLJINtxCRamvtYCbtEVlvuN2OzYKp3lkTu_2feNDqGzILTZGzjuYlXWJDSZ01ZUeSqqyKkmYlY0WR5XleZ_Xk8LvJgdkKnqryvszjUT5I9ShjweX4FG_k6BZtNdIWetWicEsHZfhTlKxupbEuXdsbrp08ImuHIiJruZvRfXSa7if1e7BFUaQRWTfccb8auWiBKdnxzaTmihqD2gXFnMXT-1ICsfLXEHeh3uwvXkKR3RQuuo9US-7DDp8HlJ--gBmHQWkLndIvcSoSVygnG9yAsVwI4NIllUDrStCXjx9WXz-AGZueW6DQjBvQ6BVZBe8LbUTWvsKaiKyBytZZEmMbaq3LeGj22b2IktVXS9kDtGM_TNmbLKYt9CVsEqo3Y4_Sml-OHVmHTO5YCrHVfBD43USCGHtuY9V8c-uVUDpuOd1IZSxnBuJeo4upi3rsUw0GziAeOIsF7lAAmQbcxANHiKe9H7NhdCbjMv-bqEKs0ahRM4xbrt9PWPAmImvmqwFZkxTivtO0x3hQ7gDRUXZDhXApFpG19cnoci0uyyVNqoWC-Am6unhJRlfSIpIlkDwl-58c8zpvKvBo_Glkns108UVzaX1I71yAI1LNizR9vFdTuYpI6Q4tLq2vs6T6ncBG5Cp5CphCgY5Ilp4gLrMih698I6n4g8pWoI5I5QFcg-EbLjt1byOycuOd4q2_rMMdZsEGl5-J_z8ZIHsDDXa0pHmRkSRQmYIQUmyuUX6CLYxalBNmd8uMODtEXNeENDQ98PG0w2__9IXIBdIJGRVsFNTiNZVKckbFR6WGO82HazU6ctXfKPgYkvkGDdN88EcMU9LYEKL59r-oGDE46D3SRilx-HdedffIJR5YO08mBM_Nfs0P_Vq2rEhp5azuUNvP_RAOF1L1gusXT2nvlVdOePHeFXXPPH52vu_jx78-TVefVDsKvNNUGjFrqkOZvlNu5e2fB_NvJFhxjLttmpLucf-hjP2sJ-gHaN_msPr3OJQnHFjF0EXZZetzr0YDkvZoBl8r6sM8veFUILOvjNy6Kta59dMGCHH8h33gk_ZdnlgeeqJqkqSj-JMm30X0JxJ22onn2W2BybzbqhOelHXLX-B5JRR7uO0HccTTS49Y_MNcHZuZa33ClZVd9SsxlbgeJXsV1fl-d-WWfB7OyMWhnbi44zI54dLWaf4LXPZEjAd5NqwOzYw1PcaaLuumOMBqAzYMUMP-_MnS4BZfK2nx6fUZ-NVqLjd_Ynf-1PIkZork-PGF1g12sFbacZuwdNqBlO00ulYt_gflis0R2aB0HPGF_fmetTycGWx2AhbzononWHxCNlpc7XfBGbE6NDPW_Bhr1bVt-yOs6zB6A-xZYXogM8ziGGbJWNL82KVTF8u_7cr96Xjq1Z_neb7nsQB-plYeU6urtlz-iFogMTPchWfWHxN65ZHpgf48lDzomdLR4Z4vyyUhCXQsve-pu_XgIXylNX12BSS7Zluq90-_qyj74GrKsexccCdAM9zqBG5ZuXOLcnkuc07hbK4-flMiNGUU7u_dy9C9sVTbe0aF8L6ChXt7Ne5daeEuzbNpcTAOzGBFeIM6vWmxjbLVMo-yVTZZJMmpRVI14Ndzye2pkenSaY695gWLslVKqihbkSRoTN_SeMThLfhvas7yZZStiqCYnMQi70qESeW5ouFUTtHw4pikUbYC1Fr5htgoaSMQrIKw04Cpvqd-H8FX3PQo7dR79O3x76mZmiz7PbjXAR3lAltoR2_B-NdpR2w0CPHOyxCBH2zq-qSHGREy9Y18p7QdGWrouMCIENifce3r1mdEMrh-dZ_SwP6lLqYDdKP5DjVQvQn9LPLSaCHEDWMVLpx8LwuNopPhcTeQkGDis-Yb7px8EEU3-1uJFAyzdH85tdHC6Ltd2bB431Kb9Zw21vYzr9prYWLgbL_kpdUWBORwYmq7vYB8ab7NQGNH9D1u9XOHTbkg--3W3AvnNxp0p9nwdrNuv-opXHR1cZA9Iaumd5X_x_-34v-jGL3t_TjNWpouw748rEvJ6r_KItgttcA7uAWNvdpNDXKDTMkWxqGlFkF1Tht1WmlnUfsl3vPPINFYV1cVCKUG9-wwfcxsEVqFRkZkaad--wJWwiiQh0a5NBZpGz5r4lP4JDk5LHzf9N17_10rCJyRW-jpg9Nz0V5mbZ3V9AIv02VBinRZZsXF9jIvlimrkq6paV6ytK6LriMVZXVJSdqU2QW_JAkpkmWapxVZpsWibbplmVVJ1SDDluRRnmBPuVi4dFwovbnwXxQu07wq6-WFoA0K4z8fE7LPz6i4udCXPn-bcWOiPBHcWDOrsNwKvPSfyULfxhXGNz7-Pm5Rwmi43Lzyy6lDpji5lYb2CDuquT9K1WgNb338QnwWF6MWl7_-JSVQ312S_wUAAP__UCh6ZQ">