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

    <tr>
        <th>Summary</th>
        <td>
            thin LTO produces function signature error
        </td>
    </tr>

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

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

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

<pre>
    a test code: https://github.com/yamt/garbage/tree/1f7dc06dd2f6c63bf0bb27f58ffe2c98fdbaa953/lto2

it fails with -flto=thin.
i'm not sure if the problem is specific to wasm or it's just wasm being picky on function type happened to expose it.

```shell
spacetanuki% ./build.sh          
+ CC='/opt/wasi-sdk-22.0/bin/clang -Os -flto=thin'
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=thin -c a.c
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=thin -c main.c
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=thin main.o a.o
wasm-ld: warning: function signature mismatch: f
>>> defined as (i32) -> void in a.o
>>> defined as () -> void in lto.tmp
spacetanuki% toywasm --wasi a.out
Error: [trap] unreachable executed (4): unreachable at 000080
frame[  3] funcpc 000080 (a.out:signature_mismatch:f) callerpc 000108
  param [0] = 00000000
frame[  2] funcpc 000100 (a.out:.Lf_bitcast) callerpc 0000fb
frame[  1] funcpc 0000f5 (a.out:__main_void) callerpc 0000ba
frame[  0] funcpc 000086 (a.out:_start)
  local [0] = 00000000
2024-05-10 14:20:55 (1715318455.896787000): [105704600] instance_execute_func failed with -1
2024-05-10 14:20:55 (1715318455.897278000): [105704600] invoke failed with -1
spacetanuki% 
```

the same program builds and works fine with full LTO and no LTO.
```shell
spacetanuki% CC="/opt/wasi-sdk-22.0/bin/clang -Os -flto=full" ./build.sh
+ CC='/opt/wasi-sdk-22.0/bin/clang -Os -flto=full'
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=full -c a.c
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=full -c main.c
+ /opt/wasi-sdk-22.0/bin/clang -Os -flto=full main.o a.o
spacetanuki% CC="/opt/wasi-sdk-22.0/bin/clang -Os" ./build.sh 
+ CC='/opt/wasi-sdk-22.0/bin/clang -Os'
+ /opt/wasi-sdk-22.0/bin/clang -Os -c a.c
+ /opt/wasi-sdk-22.0/bin/clang -Os -c main.c
+ /opt/wasi-sdk-22.0/bin/clang -Os main.o a.o
spacetanuki% 
```

the same result with clang built from the latest LLVM (46435ac19e09039fb146fa6c12da0e640a66d435)

i found the issue when trying to build wasi-libc with thin LTO.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyslkmP4jgUxz-NuTwlcpyNHDhQTXOqUV9Gc0UvXoi7nDiynaL59iMn1EbX1HQXjRBESd7vrf7b6L0-DlJuSHlHyt0Kp9BZtzljH1atFecNQpA-ALdCknwLXQijJ_mWsD1h-6MO3dSm3PaE7aNNvIeuxaMkbB-cjH-ZqgWnlRBMVbzKW0XbltWqXCslGW_WSrSITZkTtjfBMkJ3hG6XXx1AoTYeTjp0kCgTLMl3odNDenmBsLqHwQbwk5OgFYROwuhsa2QP2oMfJddKcwgWTuh7sA50IKz28H3yYbnXSj0cYdT84Qx2ADUNPGg7QDiPEjocRzlIEQnyx2i9BB3S11GSii5f30ljlnt-RC4DDtODJqyElLB9O2kjUt_B8-dizu7gyxeS7wirCdvbMVbxhF4nXjwkjKU0GuuBsD03OBwh-ebf1CLaPZM-RYCEA6b8D1B61MPtoJliAVO7kGKXEiPiAJ7QDXo4xsvnPsURxhAHoNe-x8C7-fElivzr8gUhlY6NRA-ErXXOCGsgiU8erRaghxeH_2X0k4UJNg39-G7Tgz3P45UkMfkIn8Ly4lfnrIsxkvIuOBxJuYNpcBJ5h62RIH9IPgUposuCsCa--vo5BqCU0jVdcMphL0l5B5BHUqzLyC9vRMTiOd8-1-nwqk4q5sTRGOkWo4yuFyzAiA77GCSNXJLvZmj8XDtmbx1n9I3j9F4dWh04-nDtjar2mpVdJaHK16zDIU7HITbgJ1aL1yx6XZDqDcsHdDGkp4SN5Wg-SJhRViS0TDIKWUHyLaMk35ZzfFmdlXm2LsoyXTdVva6j0dI6Ut5ltKxpUdGZqwcfcODycOnzIQY4K50UF6nLfs9fzer1R_4e7YN818HVyF4J2muVi8LqsZ_V9RjHYtYzDzgIOFn34CEulIWuJmPg_u9v88PBxsv0l7XyooXst6UjeiWMvRHbPyCxC_YWiZ3LcbPEPlFultgZdC2xNzbhuu437G2frPWny3tDRf-niL-ympz0kwnLslnAsYQBlLP9fJgxOB_A7u__-WveDqoiL5FnjaQNzRvVZkWlsOIZE0hlVVCsKlHk5bOoXQ5KoOw0iJmovZ8knDo5QHDnePQJdlnNMCdsdMuXgObN-GXxrsQmF03e4EpuLvKzLupVtylQNE3LmpaxTGSV4A2teI2tKJoGBacrvYlKRsuM0pLVrE4rJqqaSl5XtWJtJUhBZY_apMY89ql1x9Uc5abJakpXBltp_HxGZWyQpyWFOJ7lbuU20SZpp6MnBTXaB_9CCToYuXnKI2qXmLj0750dZNyUV5Mzmw8OuRF8-UtGZ79LHudkDscTtp_D_TcAAP__ID1YXg">