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

    <tr>
        <th>Summary</th>
        <td>
            WebAssembly compile crashes on Windows with assertions enabled
        </td>
    </tr>

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

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

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

<pre>
    Whatever I try, it appears that WebAssembly on my LLVM build just doesn't work. I always hit an assertion in the WebAssembly CFG Sort pass.

It appears to happen with basically any code, but here is one example:

```llvm
target triple = "wasm32-unknown-unknown"

define void @integer() {
  ret void
}
```

When I compile this file, it results in a crash:

```
$ llvm-build.testwasm/bin/llc test.ll
Assertion failed!

Program: C:\Users\Ayke\tinygo\llvm-build.testwasm\bin\llc.exe
File: C:/Users/Ayke/tinygo/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyCFGSort.cpp, Line 374

Expression: OnStack.count(SRI.getRegionFor(&MBB)) && "Blocks must be nested in their regions"
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: C:\\Users\\Ayke\\tinygo\\llvm-build.testwasm\\bin\\llc.exe test.ll
1.      Running pass 'Function Pass Manager' on module 'test.ll'.
2.      Running pass 'WebAssembly CFG Sort' on function '@integer'
0x0000000001DC60E0 (0x0000000000000016 0x00000000033CE970 0x0000000000000016 0x00007FFD556746B8)
0x00007FFD5560ADFB (0x0000000000000001 0x00007FFD55631EFF 0x000000000566F170 0x00000000056D1FB0), raise() + 0x21B bytes(s)
0x00007FFD5560F1FB (0x00007FFD5566FA60 0x000000000219E230 0x00000000056D4810 0x0000000000000020), abort() + 0x1B bytes(s)
0x0000000000403B46 (0x00000000056BBFC8 0x00000000056D1FB0 0x00000000033CEC60 0x00000000056BBFC8)
0x0000000000403BF6 (0x00000000033CECB8 0x0000000100000020 0x0000000000000000 0x00000000056BBFC8)
0x000000000044A68D (0x00000000056BB650 0x00007FFD4E954DF3 0x0000000005674950 0x000000000564FF60)
0x000000000093E25B (0x00000000000000B7 0x00007FFD4E9557F6 0x00000000000000B7 0x0000000005649E70)
0x00000000012F97EA (0x000000000564A008 0x0000000005672110 0x00000000056488C0 0x0000000000000000)
0x0000000000DF3CBD (0x00000000033CF400 0x000000000564A090 0x000000000564A0B0 0x0000000005649E50)
0x0000000000DF392C (0x000000000564E768 0x0000000005643250 0x000000000564B180 0x0000000001187103)
0x0000000001677866 (0x000000000564D480 0x000000000564A280 0x0000000005648100 0x00000000000000E0)
0x00000000004697FA (0x000000000578D260 0x00000000033CFC80 0x00000000033CFD10 0x0000000000000000)
0x0000000001D771C9 (0x0000000000000002 0x000000000578D260 0x00000000023BE378 0x0000000000000000)
0x00000000004013C7 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000)
0x00000000004014FB (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000)
0x00007FFD553F7034 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), BaseThreadInitThunk() + 0x14 bytes(s)
0x00007FFD572C2651 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), RtlUserThreadStart() + 0x21 bytes(s)
Illegal instruction
```

That backtrace is hard to read, so here is one from GDB:

```
#0  0x0000000001dc60e0 in HandleAbort.cold.264 ()
#1  0x00007ffd5560adfb in raise () from C:\Windows\System32\msvcrt.dll
#2  0x00007ffd5560f1fb in msvcrt!abort () from C:\Windows\System32\msvcrt.dll
#3  0x0000000000403b46 in _wassert ()
#4  0x0000000000403bf6 in _assert ()
#5  0x000000000044a68d in sortBlocks(llvm::MachineFunction&, llvm::MachineLoopInfo const&, llvm::WebAssemblyExceptionInfo const&, llvm::MachineDominatorTre
e const&) ()
#6  0x000000000093e25b in (anonymous namespace)::WebAssemblyCFGSort::runOnMachineFunction(llvm::MachineFunction&) ()
#7  0x00000000012f97ea in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) ()
#8  0x0000000000df3cbd in llvm::FPPassManager::runOnFunction(llvm::Function&) ()
#9  0x0000000000df392c in llvm::FPPassManager::runOnModule(llvm::Module&) ()
#10 0x0000000001677866 in llvm::legacy::PassManagerImpl::run(llvm::Module&) ()
#11 0x00000000004697fa in compileModule(char**, llvm::LLVMContext&) ()
#12 0x0000000001d771c9 in main ()
```

So apparently this assert is triggered:

https://github.com/llvm/llvm-project/blob/0e27d08cdeb338766a477fba071b3df7a06ea6e2/llvm/lib/Target/WebAssembly/WebAssemblyCFGSort.cpp#L370-L371

I'm not at all familiar with this code or what it's supposed to do.

This is the CMake line I've used:

```
cmake -G Ninja ../llvm-project/llvm -DLLVM_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release -DLIBCLANG_BUILD_STATIC=ON -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_LIBEDIT=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF -DLLVM_ENABLE_OCAMLDOC=OFF -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_ENABLE_PROJECTS=clang;lld -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF -DCLANG_ENABLE_STATIC_ANALYZER=OFF -DCLANG_ENABLE_ARCMT=OFF -DLLVM_ENABLE_ASSERTIONS=ON
```

OS: Windows 10 (21H2) x64
Compiler: `g++.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0`, installed via `scoop install mingw`
I'm doing the build from the Git Bash shell.

Any hints how I can debug this would be appreciated.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1WFuTqkgS_jX2S0UbUCAFD_3AtcddbTvUmZ6ZF6OAUjmNYFDQtv9-swr0AGKfs3t2DEKxLvnltTIrwzw-P73tack-WIGmqCzOI-yipET0eGS04KiESfTGQptzdgjTM8ozdDij2eyPOQqrJI3Rt4qXKM4Zz0aYlOiUF-9jIEXTEz1ztBe0MkRhe1EmsDnJgCbrkHSDZ7TKixIdYdl4pHgjxa6_py1GcrQX7xk6JeUehZQnEU1hN83OKMpjJhgPqxLtWcFQwoFRhtgnPRxTNtLsNtWRodRPmn4c6qGSFjtWgvwJLEcjzUMjjE-UHzT8WGXvWX7KLr8w0SYWs20CSB95EqORriRZyXasGGFzhC00Ik69CqECyItFzV7i9Xhp03zbg5hTkOpwTICdcg_ibOGtsU3BeJWWXKiSoqigfH9PwOYv1pEQ9VEabFwyXgrRRjgIExAnSNMIicFxmtYb7Ku1thRg4xFW2-Rfi3xX0AOAIlcgT9zfYT2HX_v8zuCnTLLzLoeXIdSJK1DFXDRmn6wmGSTSSjU9HNT0cCDp4aChJzgFesci_8aisvkrfpIQvtfShPDScq3uP_Az4Wbj6HgUmpwJu2lEb4vmfx5BuxxEF9wsslVJo_dxlFcZUDZXy-kYMJZsBwuCvLayMXccsLU0NzbgEa7jpHn0ztFBxEbIUAbCs7jx_aQACwoK_OpKrzPfXvmIV-FBxAv48Q7WHEVMCL8vyyOvFQPPDty_CoGnQ0sDXb0knFdM6A-CQ6BGaRUzGXbSWyB4oveyoBFrgk1KieLqcLw6kjJG8tPYGoFyqwPLSt6yesvw323fNv9dD7g6wXc_6Hqg2sAvqyxLsp08GUCvJKiySDrmqxiY04zKYCPyWMrjSgQvnEINKUwaAfEdckOnUENte0GC_-24Jo1-PpXLR_VcQ_EVWGi2RuspA7WGNM31LaKgu6tIEHiTiUF0wxHHRxupmVJsL3CGkBS1S0NT_SBoI00MI1C74BPDUwNHkc7rooImnF3OLezAQqw6KDyXwpNMfoefQG3z04wagW10kLBq-Vjrg-umeqsMfOGHhtIYLX6-YKf-6Irm6EZPPRPDcQLXHBC8bxvX6HEoN95FCvpIkobTQlIvIt1Iqfw8km4bpjcgkzFRWibXfWuie4HWJUt0a9JD0oPAUAaRLM3Hk0HnckgPaUIC40am66oLkuWTQSQVBxbx7RuZdFtRenYiWFX7ApimO6TQQZlAI67T1x7YKdD7FgBw63bI6Q9Z_uQukgVeeyOTT4yeTLqGb4ziqGZnSFVNoiraoPYMQkzj1st1iKcbAfDNEMTcrfb8YZl0wyLBjZ2I6WGjHzzgvjdD3kB4D9tJ9QhRXWvwYMPoa3CsOb5GzJ_1CF1RNZcMIv0oTO8P3UPS7xzW_zek-sDVAqJo-j-ABA7tUM7W-4LReJol5XoPVXD3UNa_zhEEu9iYqP8Mc8syFRVIzR9UMb2EgdUB3qZpynY0hbKIl0Ulc_wXpfha3H-u9ZK4V-xpEYuqTEAKHnjeuXJsi_yAnj3nRyU5ZMNOwMeRoTBFlIi_QdGWMjuUpWoOhRM2pG2vEsBm9bKZbLexyMM03oZis8zizeqal6ZYe0uyOD-JWm11hmIULjbweuAfEaDEl7ILKOM-5a1aU67XwlVAJuZfgdA6kotcGkLWBojNqb4n9qXVbzds6w3D6ye99To1TFl9c-C8Ls1hh6ydgXHNntNoD5eBS3Epy3gX3czP8vw4zbY5XMzAd25WtYpJ_zNiR0Hqi-UNUS8_JBkt82JdNHch1tpg9UUzuqJZGsMTaR5YR7M8Ox_yiqOMHhg_gsOKrX3mmmtQPV5U2SK7kf8HurnhinR9GW8twqjg6i4dUb-3OBiE_hrT7Goi3mpRGHcxg1cBc7kl_BKadYNm4ejn0ObyXtJVajM0hNRNmpds30ESB1h0rt9bmNPDMb3i_jye2g0WyPlbabum_XBlP4KTb4Rt-bQdWfSC3BzuR593fFbF3ZMOcn1kySOF1o77ffHQEbzKRROIFnD7hGuabIY0YQ9vZZHsQHQW987b__rOHKa56CIoDJNYMaOYhZpmEsOgOiHbkCpEDbV4S6hiMGow_IvdB22mEeURvjqNlSlcLw8oy0sESYemKdrSQ5ImtKh7XlJ00epCOYyIxJSI2ypHvDoec85kWorzcTd_wR6hJ7j8u3P6zlAq2h4C6YOhit8ormeC6CD2PD6jlyT7RtF4PNyFQY-ecIPN2l4---vVZr3YOL9PZ95I89p37EfPndv_9uu5zfqvVx8WLFnKoMgQJKaOO7Nfnpv51dpeTyG3eIuXC33_xXZm_mbtL-fTl2Ah5uCa2538G8gMTsC4703Xw5u0zWox-8NfDs4uXHs-8xbuPbJ_zmd4cO51ufiX765XMBmlNNuNNCdN46u2FovZppZYvK42_p_rpX3VXE2unm_o1SrZ2C_27K-_W8x2FtlLdz4spb1a-cv1dPGyklr9IugWK9HoaTI6UmV3A6u_YRHen0bTM3PrE0Icdgj276Dqgkd2c2D5p2lsDP0RPDP5fORs_1iwD0WWlFWSQlF1RvMke357fIPy5upNFjLH6lhyI5qdkAchDsCzPxIqIHgEOfgyjCBz7k5XxuvoiXPR4BHuXrenZYEi_j4npShm94jvWZp2gsTOzgiSUwnFXX4SjVeaITgAql0dcqe8AkIhE8dQwaKEliweP8RPWmxpFn0okzJlT203vzRuZbeNibrwqkkZyNduOEcsoyHI91AV6dP_3uebTFSsPOyflEjBkRKHEY6IalFiqtvIYqFhbE2m4Jg9pDRkKX8aTZzRxHtInrCCsaJjA8PBr5ljBsefoTFDhUuSTkJ9pCsMDul0LIDHebF7KJ6ajt6Ow2Sa8JJ_nwS5kl3G2IU-rcp9XjzR8zv7SB8kt0-S1f8AFrq3cQ">