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

    <tr>
        <th>Summary</th>
        <td>
            [Flang][OpenACC] `collapse` Associated Loop checking asserts:
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          erichkeane
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/b3Y4oGsxd
```
! Type your code here, or load an example.
integer function square(x)
 implicit none
    integer, intent(in) :: x
    integer :: n, n2
    !$acc loop collapse(2) device_type(nvidia)
    do n = 1, x

    end do
 square = x * x
end function square
```

Asserts:
```
fatal internal error: CHECK(level == 0) failed at /root/llvm-project/flang/lib/Semantics/resolve-directives.cpp(1388)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-llvmflang-trunk/bin/flang -fc1 -emit-fir -fopenacc -o /app/output.s <source>
 #0 0x0000000003db85f8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x3db85f8)
 #1 0x0000000003db61b4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x000076b92b642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000076b92b6969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000076b92b642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000076b92b6287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000005aafe89 (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x5aafe89)
 #7 0x0000000004c2c030 Fortran::semantics::AccAttributeVisitor::CheckAssociatedLoop(Fortran::parser::DoConstruct const&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c2c030)
 #8 0x0000000004c2c1f1 Fortran::semantics::AccAttributeVisitor::Pre(Fortran::parser::OpenACCLoopConstruct const&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c2c1f1)
 #9 0x0000000004c556c8 void Fortran::common::log2visit::Log2VisitHelper<0ul, 7ul, void, void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::AccAttributeVisitor, Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct>(std::variant<Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct> const&, Fortran::semantics::AccAttributeVisitor&)::'lambda'(Fortran::semantics::AccAttributeVisitor const&), std::variant<Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct> const&>(void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::AccAttributeVisitor, Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct>(std::variant<Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct> const&, Fortran::semantics::AccAttributeVisitor&)::'lambda'(Fortran::semantics::AccAttributeVisitor const&)&&, unsigned long, std::variant<Fortran::parser::OpenACCBlockConstruct, Fortran::parser::OpenACCCombinedConstruct, Fortran::parser::OpenACCLoopConstruct, Fortran::parser::OpenACCStandaloneConstruct, Fortran::parser::OpenACCCacheConstruct, Fortran::parser::OpenACCWaitConstruct, Fortran::parser::OpenACCAtomicConstruct, Fortran::parser::OpenACCEndConstruct> const&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c556c8)
#10 0x0000000004c537a6 void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::AccAttributeVisitor>(std::__cxx11::list<Fortran::parser::ExecutionPartConstruct, std::allocator<Fortran::parser::ExecutionPartConstruct>> const&, Fortran::semantics::AccAttributeVisitor&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c537a6)
#11 0x0000000004c56588 void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::AccAttributeVisitor, Fortran::parser::Statement<Fortran::parser::FunctionStmt>, Fortran::parser::SpecificationPart, Fortran::parser::ExecutionPart, std::optional<Fortran::parser::InternalSubprogramPart>, Fortran::parser::Statement<Fortran::parser::EndFunctionStmt>>(std::tuple<Fortran::parser::Statement<Fortran::parser::FunctionStmt>, Fortran::parser::SpecificationPart, Fortran::parser::ExecutionPart, std::optional<Fortran::parser::InternalSubprogramPart>, Fortran::parser::Statement<Fortran::parser::EndFunctionStmt>> const&, Fortran::semantics::AccAttributeVisitor&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c56588)
#12 0x0000000004c57280 Fortran::semantics::ResolveAccParts(Fortran::semantics::SemanticsContext&, Fortran::parser::ProgramUnit const&, Fortran::semantics::Scope*) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x4c57280)
#13 0x00000000048c156b Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x48c156b)
#14 0x00000000048c2ac1 Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x48c2ac1)
#15 0x000000000492fc56 Fortran::semantics::Semantics::Perform() (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x492fc56)
#16 0x0000000003e10e7d Fortran::frontend::FrontendAction::runSemanticChecks() (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x3e10e7d)
#17 0x00000000040c0630 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x40c0630)
#18 0x0000000003e0fb25 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x3e0fb25)
#19 0x0000000003dfe5e7 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x3dfe5e7)
#20 0x0000000003e19913 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x3e19913)
#21 0x000000000219108e fc1_main(llvm::ArrayRef<char const*>, char const*) (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x219108e)
#22 0x000000000205871f main (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x205871f)
#23 0x000076b92b629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#24 0x000076b92b629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#25 0x000000000218f9b5 _start (/opt/compiler-explorer/clang-llvmflang-trunk/bin/flang+0x218f9b5)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```


I note that `tile` doesn't crash, but I believe is supposed to be ill-formed (as is this one).
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWlFv2zjW_TXMC2GDoixZfsiD6sSd4Cu-DcazM9gng6KubG4oUktSHmd__YKUGlmaTCbedYEWSNGilkTee865l5cSSWat2CuAW5R8QsndDWvdQZtbMIIfnoApuCl0-Xx7cK6xKM4R3SC62euy0NLNtdkjuvk3opsi_sdCf7anEpEcpaT_S3JEI_zLcwP4WbcGc10CPoABRNdYGyw1KzFTGE6sbiTMEcmFcrAHg6tWcSe0wvZfLfMdshOiK0RyLOpGCi4cVlqBv4Ex7nt5s_6ncohmQiG6wh5znOPTuOHX28r3ULR_iGiE6IJxjqXWDeZaStZY75t6UyUcBYede278LXUUpWA9JoxxqbHCKL7Dkbfp_fUPQJW41P6ioxIanTCiHSr_eEp2oiHJc2vBuBCA8bOKOSYDK6OYxGCMNp7Y-qf79f8hmkk4gvQevVPiWVRMSCgxcxjRjdHaIbqR8ljPGqP_CdxfVpIpH1gpCkQ3W6iZcoJb3x6slkeYlcIAd-IIds6bBtEsirOs0-Lxy32-vce2LWrhMMNFu8cGGm0cdhpP8ki4Q1vMua57EH_EIqxtwbvGTJVYKC7bErA7AOaG2QMuGH9yhvGQPFvH-BMu27rplCJzRFaPRu8NqzEz-7YGFVT03HXj7XNdN0KCmcGpkdr4HNpwz3_mgQQlZs606sknuU-pTh08q3iEZ1ALN6uEwbNKN6B86sy0N868KhvduqZ1c4tRvLa6NRxQfO8zAdGYYHIiX__EZZElVYaDBiE17bPtfjwaoVwg9oun6WP60siw33faOgOsRjTtsz9kPc3-V4aIfiKnHlef5YjG0QR1GhULvBV7xeRPTJXSW88CiDW2Yi9UpXcO0dxfH7Uow89V36NLnjgn4V_ngPYOlmmxokW6oAklPZ0uHU9ZuksXMylUe5rtVds94HOr52nAHLoMiOOxwVW6qjhu3MEAK3dPQsrLrIf-g_XFFO5imeK9DfQuhb1YpoPhZGyYZssqxqzww-gis6HjYDY9j1_CWAXZ9bKltzd4W557W3DKSUzwRhtnmOrT_KW4hMuc89w5I4rWwa_CCheqGYrz9QH4U26t5oI5KL9o7avOyFTDjIW--Z1ea2WdabnD3P8Kw-N6THsuA9NsyjSqov-O6WOY7P6U2d8aUPl67QX49hSjKhoorsYUkyTlWRjTY55c17Xuf0u9p0dPrrv8ovc0cP0JZOMJrUkrfWVYdv91BWL9itFzBUpwTMheLH__FwNfJfyi9VPbbLluoGvwG5NPKF5fGgm6_nP_fQQ-Sc2fXkLwnh5rXRdCQXlRp1Gg39Nh65gqmdQKLgPH-OGyHr8x4S7qkDtdC35Rl3t1plZ8j2hmXdm1ODIjmHLT4H5E6ruI1FlJWl9cB0Mh6x4jupSsLkqG6HJaFv_a0nlhDG8kH8nzYyVPGPIf08FHnnxMBz90pL7H6SDt4bQqrICVWGr_6vsxS_x4OXXNr57wXdN99SAaR2Ty1RMvWfodfKCMi99ux0-nKOoupLBvpuz9CXjrhFaPzIxj9mKPSak5C34uthPfX2W8XzOiPmZDRKNJRNMke-079nt6x9g65qCGt0vRpl9E3rq6mxzfMtgAF5Xg7Gv83mw9ivQoUXTjbzP5Fq6HfnF62xZNtxQbzPwVwvdQvlfllPV4YLi2kfCWhQ9lL1D2-xrVftwOo5pORvWSZm8vNf7cbWXknHvR7F-8Tbxsgqy1cnB6VYRz_fpNh78r4d6tWldDugXyK-rklRh0ikc6ZTxK0uI9Ov0_q8FeslD5ugJXZNZhH5gtJswo428vwZ4z-zbhvzT01xbISzAIlIwEWtGKJ-nbqMaXj2AqbeqA74owOyADzNEWRQwRgeVkaq6Mj4LqK-Wmv8pDterumVZ9BR92DuyVQfewBtDjnQ7CSTrd6RiDXusSPoM6x1zAXqht2CXcCAn9oyuL3SEbcGdjsUlV0ORSsSfAp0NpSrxD_6CsY4rDa4PjdZcPqmmdd_BNyknPfVBmNd7prCCB5dsRnRALdyFM8EMw3y_tlel1BF7oUTIZZatVFL9FrycysDzq7h3n0nBfdXrrgQ-0Ri_3NFpFJANc8WhXM9_1bO88N4Y9_wwVitf8wF7WBvL-9Wl874qQe1AD5NGbCyVJtowq7OFez2VndHA52ROnq3J14SZ76DIYXEwNwoLg3c732VnHjNudEXq3C1icuUjGkc2qVZHgzvgVYxPM9gdZ-jncgamFYg5K_LtwB9xt7qM4x9uHz9v7z78i8pLm2IBrjQKf_TiKV388yYNI_oCVdoDdgTmMUuJ8zUwJLjVYhejSdSdbfBIWrcMPuAAp4AhYWGzbptEWSuw0LgALKWd-SobSS8Csb-IOwmKtfILNb8rbuFzFK3YDt9FykZI4owtyc7glRREtl1FRlgVEnJeE0DjJFgWQpFxEhN6IW0poQhYxibJ4Sck8g6xaQppmy2hRQVyiBYGaCTn3qs612d-Ekzq3UZyRKL6RrABpw6EySnuBKUrubsxtOOBTtHuLFkQK6-xgwgknw0m0TeiR3KHkU7_4g5I7L9bLmayU4OE4AP4Szmv5mV6oPWYvp6VuWiOnZ9cuOHPUkzne0v8EAAD__y0Fe3Y">