<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139856>139856</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[ARM64EC] Can't `std::invoke` a virtual function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tuxzz
</td>
</tr>
</table>
<pre>
Minimal code to reproduct:
````c++
struct ChildClass {
virtual int fn() { return m_c0; }
int m_c0{0xcd};
};
int main()
{
auto obj = new ChildClass();
auto v = std::invoke(&ChildClass::fn, obj);
return v;
}
````
The crash point always like this:
> [0x0] ConsoleApplication1!ChildClass::`vcall'{0}'+0x54 0x66f818fc00 0x7ff78acc1184

Verison: clang 20.1.4
target: arm64ec-pc-windows-msvc
This is a arm64ec specific problem. This can't be reproduced on arm64-pc-windows-msvc
For a simple virtual function call, there is no problem.
This bug also makes googletest unusable.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8VE2P5CYQ_TX0peQWYOOPgw_unm0ph71EUa4RxmWbHQwW4J7e_fURHu9MZxNFQrJFvXr16lEgQ9CTRWyJuBDxcpJbnJ1v4_b48ePUu-F7-1VbvUgDyg0I0YHH1bthU5HkHaEdKenHUoRf0qJdiH5TEa6zNsPVyBCAVGkf4K593KQBbSOMlvCa8CYFwWPcvIXlL0VJfgEg1UuiTzkJu-9XF_pQQ4rkie3zZ187TOqDdI-_15RbdOD6b0DyF7D49qTrwOZPwPsOC3FIDeadtnf3ijuufMrbY6mBa2J-4jj6uH9K_KdJ71r_mBGUl2GG1SXd0rzJ7wGMfkWIsw6HubQj-Rcg4kIflIgXuDobnMFuXY1WMmpnGeHsV1mkpHcljSG8SpYlDbwi_EIfogAA-ijLsWb1qCgF-qjGsaqlUozVBRxFOSPi8tsiJyTihfB6jnHdyfmN8Nuk47z1Z-UWwm9bQJ_JGKWaF7QxEH6TIeD-owQTSKsqY0NdZQWqPmuascjGfixVnrOCN_1xVLT7E70OzpK8A2WknYDTMzsXhHZR-gnTvIH0S1mgylaVvWk7uLeQLeGufnqqA-gA8icMwopKj1rB6l1vcDnDjlHSEl5F6PFjmnEAZ9_z_oP85jxICHpZDX5M8LhZlU4A3q2-QpzRYxJg3UfBJ2X9NoE0wcEiXzHA5NxkMGKIsNktyN7g-TS0-dDkjTxhy6qi4rTheXWa20HQfqj6XFCUShSs6QfW9PnAWV0yyseTbjnlggpW0ErkojqLXChW1UrUrKdMDaSguEhtzsbcl7Pz00mHsGHL8qYW5cnIHk3YXwHO0xXZo4Tz9Cj4NiVl_TYFUlCjQwyfNFFHsz8f3e9fy-LLdR_Tw2BS0l_vUUlB_svC0-ZN-z8zloodn2z17huqSPhtl5jG7Ojh3vK_AwAA__-I5HW-">