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

    <tr>
        <th>Summary</th>
        <td>
            PGO fails with "cannot guarantee tail call due to mismatched varargs"
        </td>
    </tr>

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

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

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

<pre>
    When compiling Unreal Engine based project with PGO we get this error:
`cannot guarantee tail call due to mismatched varargs
  musttail call void @"?TimerUpdate@UDataRegistry@@MEAAXXZ"(ptr noundef %0, ...) #51, !dbg !44172
LLVM ERROR: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Exception Code: 0xC000001D
 #0 0x00007ff79d18f7f6 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x210f7f6)
 #1 0x00007ffe29b3bab4 (C:\Windows\System32\ucrtbase.dll+0x7bab4)
 #2 0x00007ffe29b3ca81 (C:\Windows\System32\ucrtbase.dll+0x7ca81)
 #3 0x00007ff79d191c95 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x2111c95)
 #4 0x00007ff79d0ff7a4 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x207f7a4)
 #5 0x00007ff79d2bbf6c xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x223bf6c)
 #6 0x00007ff79d26324a xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x21e324a)
 #7 0x00007ff79d29b199 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x221b199)
 #8 0x00007ff79d25c828 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x21dc828)
 #9 0x00007ff79d25fb72 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x21dfb72)
#10 0x00007ff79d1dfb6a xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x215fb6a)
#11 0x00007ff79d1df1f3 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x215f1f3)
#12 0x00007ff79d1dec66 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x215ec66)
#13 0x00007ff79d358a0e xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x22d8a0e)
#14 0x00007ff79d358e91 xmlLinkGetData (d:\build\AutoSDK\Sync\HostWin64\Win64\LLVM\18.1.8\bin\lld-link.exe+0x22d8e91)
#15 0x00007ffe29ae6b4c (C:\Windows\System32\ucrtbase.dll+0x26b4c)
#16 0x00007ffe2b284de0 (C:\Windows\System32\KERNEL32.DLL+0x14de0)
#17 0x00007ffe2c2dec4b (C:\Windows\SYSTEM32\ntdll.dll+0x7ec4b)`

Here's the code:
`
class UDataRegistry : public UObject
{
        virtual void TimerUpdate();
}

class UDataRegistrySource : public UObject
{
        virtual void TimerUpdate();
}

void UDataRegistry::TimerUpdate()
{
        float CurrentTime = GetCurrentTime();

        for (int32 i = 0; i < RuntimeSources.Num(); i++)
        {
                UDataRegistrySource* Source = RuntimeSources[i];
                if (Source)
                {
                        Source->TimerUpdate(CurrentTime, TimerUpdateFrequency);
                }
        }
}`

Renaming UDataRegistry::TimerUpdate() to something else fixes the issue
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8l1tv27gSxz8N_ULU4EWypAc_KLLTAk0vSJrTnvPGy8jmCUV5SSqXb7-glER2tsBui4WDALIFzv__45AmZ0QIZucA1ii_QPlmIYa47_1a3ImbaH4sZK-f1t_34LDqu4Oxxu3wrfMgLN66nXGApQig8cH3_wcV8YOJe_z1_Rf8AHgHEce9CRi87z3iNSI1WhElnOsj3g3CCxcBcBTGYiWsxXoAHHvcmdCJqPag8b3wwu8CIjXG3RDiPPa-NxqjjCDGEL_8ZjrwtwctIqCM3G5EFNewMyH6pzQmI5-2df3jx__SaFYeoseuH5yGFiOWE8QavFwuEaswYjyn6TtiVMtdemQZLRgi9dXVfz7h7fX1l2vEa3zh-ztwuOv1YAG3SS2FTWkS0fQOC9n7CBoxikj99Wpb32xxGGRnIhZYDjvs4dD7mKa8j_EQUorYJWKXOxP3g1yqvkPs0tr7l8e75zQjdmlCGCAgdomF09g4ZQcNOO4BKy_CHkuh7qIXCpaI1NtHBYcRqek1JHry2JD0RzcptYhxgsljelG0bVFpWrZFu8KPnb0y7u49xJRQjFipE2PeyMFYjfKmHmJ_s_mI8ubmySmUNx_6EL8bt8pQ3rw8U95Q3tBySZdlCjYO5Y21-p017m4Jj4DYBXlklCRTxKpnJDojAaskl0JmiaGZGL4bp_uHMHqHCB1nKG8G5WPakUtt7ahapKhZk73RVKKkv66ZomZNfpq6iqoqP3fqaDKdkbITJNK2hcjOjESKZDoj5SdITMp2pc6MxHgynZFWp0grzjJx7oWDZDojFadIlaRVde4s0WQ6I5WnSLkqWXnuLOlkOiNVb5BaWbCzIyXTCSmdVW_OT93K1dn3Up5MZyT6Fom2_PxItOUzEnuDBGp19lsmT6Yz0unpzfNSEDj3L04n0xkpe4sEFT0_ElR0RspP7k0BK5mpX743WYqaNVfHmpKVmQbyd5oft9eft1ecLTdXV6MmTVGzZnGsqZgGlcmfa_735tv206jporZ2vtxTSBJckaRJ6g_gAbEiTMXVVD9NlSwitbIiBHxSb-JUXx0GaY3Ct1_kWK-RGhUXo1x1b3wcxHP9ely2TgccH4cVm8n7J_I3_eAV_Jsm46DTkpnXiNd_jTtyaG0vIm4G78HFNBIjvsHvIR69OnGbonqfVsO4yBk2YwhB_GL82ODrwUXTwTTDsPw8dK8K2CB2Mf5Xk9IrCCLVT_KDWI1fM7V5o4zyC4PyzQtYkjCpEShfYqvX98c2iFTTgHeIb0-TczLp5jjjlx7-GMCpp6NMTMKbl4lsnhfjZcNdgxPd2Gj9gzVJzUPoO4j7FAE2AG7NI0y7dWwSFnrNdcUrsYA1LTJaFmWRs8V-zWhGC7pSghJJy7KEFriikrSyrVqdtQuzZoTlhFNOc8o4W0oiWaVKnvFCtZQylBHohLHL1Jwse79bjI5ryinN84UVEmwYO0vGHDxMPKkFyzcLvx47GjnsAsqINSGGWSaaaGGd-shWGBumthIx9lu9I2OLwdv177dYz9O5X7M_AwAA__9QQ4EN">