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

    <tr>
        <th>Summary</th>
        <td>
            Execution aborts in OpenMP runtime for wasm target when parallel region is encountered
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Currently, a parallel region in a wasm OpenMP application causes the following error:

```
Error: failed to run main module `example.wasm`

Caused by:
    0: failed to invoke command default
    1: error while executing at wasm backtrace:
 0: 0xafe73 - <unknown>!__kmp_invoke_microtask
           1: 0x283a4 - <unknown>!__kmp_invoke_task_func
           2: 0x22d00 - <unknown>!__kmp_fork_call
           3: 0x629f - <unknown>!__kmpc_fork_call
           4:  0xca2 - <unknown>!main
 5: 0xb590a - <unknown>!__main_void
           6:  0xbe9 - <unknown>!_start
       note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information
    2: wasm trap: indirect call type mismatch
Error: error while executing at wasm backtrace:
    0: 0xafe73 - <unknown>!__kmp_invoke_microtask
    1: 0x283a4 - <unknown>!__kmp_invoke_task_func
```

It seems in [`__kmp_invoke_microtask`](https://github.com/llvm/llvm-project/blob/main/openmp/runtime/src/z_Linux_util.cpp#L2545) of the OpenMP runtime, the corresponding casts for each function call inside the `switch` are missing.  For example, using `((void (*)(int*, int*, void*))(*pkfn))(&gtid, &tid, p_argv[0]);` instead of just `(*pkfn)(&gtid, &tid, p_argv[0]);`.  This was also part of a previous PR [D142593](https://reviews.llvm.org/D142593).

As reproducer any parallel region (even empty) will do.  More comfortable might be using https://github.com/abrown/wasm-openmp-examples/ as it already includes a working Makefile for building and running.  For the llvm-project subfolder just use the latest version.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVt-P2jgQ_mvMy2iRcUggDzxQlkjVdXVVu9I9ookzARfHjvwDlvvrT07Ype1ue9o7hIJNZubz-PtmbPRe7Q3RiuUfWH4_wRgO1q06PCvBZ4tJbZvLahOdIxP0hYkNIPToUGvS4GivrAFlAOGMvoM_ezIPnwH7XiuJIb2UGD15CAeC1mptz8rsgZyzjmVrxu8Zf34W_PodpturCbSoNDUQLLhooENloLNN1ASs4PSEXa9pmtBfXMfnJgE3UF9ecAAA-I8hlTnZI4G0XYemgYZajDrczGfJfFgtnA9KE9ATyRhSDhjGnGuUx-BQ0g1nAOFP2NIigztg2Saao7Fnw7ItE7Pd7tj1uxF61ynpbEB_vIFeP7MxilhmOP-3KCnAro1GvooirlFEw_kvo7TWHXcStX7lno3uhSjbX3nL37jPkzvwJ4niDfdE5tUlH3HqvOT4JlCy3Z2sal5hFFeMmsq3PH1AF35wMjYksiD6xGNSJiv4X-uvD48fH7a7D-vNH49f1pvt7n77uP746SvL7mes4EDmpJw1HZkAJ3QKa03Q4QX8wZ6hs46goTru9ymqMq113VACN-yBi0E0wWGfJso0ypEMkHYPwqUn6JTvMMjDT2XwbhE-i_2_6_B_CPCnYh6fHwN4os6nhpHaTcF_sYKCs_yeieUhhN6njETFRLVX4RDrqbQdE5XWp-efu97ZbyQDE1Wtbc1ENehKVLYn0_VMVC6aoDpiovJOMlH9vfukTHzaxaD0VPY9E9knkc9zJkqw7aCIayd78dwM_0rrHPnemiZtvkQfPLTWAaE8QMr-2vK0BmW8auhZXf6sEqUFB3QDxUl6U4AqOY89LGGMikz5iyUTyyR3GIZrJkomlsqEYbyB22ioiatBORr3x9Z8Ny_2IZlsgIniOup36PYnln8Yd7pkWaIjLToQNmkTvkUfXlZyi_iecFOAx4PySaGA2tt0cIQUG6F3dFI2evj8JUnhfjYXeZm9xXoypLOfJqan1u2ZqJ6tRTn9Xl5rD456Z5soyQGay6uDioklncgAdX24JLLPSmto7BTgIZWvtF1rXRgLW-0PAWq6cvIbKWLtUk2IKlXi3Si6uyupnokK0IMKgNoRNhdQRurYkE9npnXHFPwBj9Smwk5aqqPSg7zSgeSiMTelJDF9r3jwsW6tbsiNdEU_Ck5jIB_gRM4ra6aTZpU1ZVbihFazBS9neVYuFpPDqshLmpVFk2UZcb6Yi0K02VJimzVLsVhkE7USXMy5EEvB8zJbTEW2kIu2yJfFAusZzdmcU4dKv9AzUd5HWi2zTJQTjTVpP1wthDB0huElEyLdNNxqSKWOe8_mXCsfbiRPggqaVtuxz1kDWFsXhsbxY2EOOzZ2VHR7CnA-kHl9QfFARtpoAjlqJtHp1btby7D0ROeQ2j8BAAD__yPA5EA">