<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/95361>95361</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Structure generated by clang-cl.exe on Windows is incompatible with MSVC ABI
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
adisak
</td>
</tr>
</table>
<pre>
I ran into an error in our codebase when mixing compilers. I have simplified the error to the reproducible example that follows.
The following code produces incompatible structures when compiled with MSVC vs clang-cl for Windows x64 target.
```
#include <iostream>
#include <xmmintrin.h>
typedef unsigned char u8;
struct __attribute__ ((ms_struct)) A
{
u8 u8_1;
int i_1;
__m128 vector_1;
protected:
bool b_1;
};
struct B : public A
{
void* pv_1;
};
struct C
{
__m128 vector_1;
};
static_assert(std::is_pod<C>(), "__m128 is NOT POD");
static_assert(!std::is_pod<A>(), "A is POD");
int main()
{
std::cout << "Size of A: " << sizeof(A) << "\n";
std::cout << "Size of B: " << sizeof(B) << "\n";
return 0;
}
```
The MSVC program has this output:
```
Size of A: 48
Size of B: 64
```
While the clang-cl program has the following output:
```
Size of A: 48
Size of B: 48
```
According to LLVM/clang documentation, clang-cl aims to be [ABI compatible with MSVC on Windows](https://clang.llvm.org/docs/MSVCCompatibility.html) but this doesn't appear to be the case. Is this a bug in clang-cl?
Is there a way to make clang-cl and MSVC generate the same layout for these structures?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVU2P2zgM_TXKhWgQy7HjHHxwkg0wQLtdYIr2GMgSE2srS4Y-kkl__UK28zWTRfewgGHDIvX4yEdRzDl50IglyVYk20xY8I2xJRPSsZ-T2ohz-QKWaZDaG2Aa0FpjQWowwQI3AmvmEE4Namjlm9QH4KbtpELrpvACDTsiONl2Su4lCvANjhDe9D8WO2tE4LJWCPjG2k4h-IZ52BulzMlNyWxDZtXw_tbguD5EEgjDdnQgdYzMfI_kvA3cB4tu4DaSEnCSvoEvr9_XcHTAFdOHT1zB3lj4IbUwJwdv-Rw8swf0D6FJPhuf4ZemUnMVBAJJ19I4b5G1JP3jmfmtbaX2Vuppc_Po3_7cocA9BN3rIIA3zEIoSLq6dxvSgd2OeW9lHTzudkBoQWjRut1gJXRJ6BIudBcjAABAKACG7y65IkdJ-1V5vwgAu12b0ALgiNwbe2fsrPHIPQqSVjf32hgF9Z0bWWye018BSSvoQq0kf8rzaKQgtILu-F_g1k8QRu4fqD8DYV7yHXMOrSe0cL5PK62k23VGkHS9jlrFGi8JXQOhdASXDv78-g3--rohlEbrBfg9JKHJR9TqPWoVAT-CDe-oUcukHnd8TPgagJvgY6-RtEd9lb8QzB6iKf5fTE7-QrMntKhis9z8SbbW8XNthN8Br_4NePUbYACw6IPVMHuQ5-kpu576_sh21hwsa6FhDnwjHZjgu-Cv7fgU46ES8-Jxsc8inz_d-KOR_SzC25x4JHA_i_4fJpfFdxsrzo0VMYw38Pnz9y-EbntOIAwPLerYeEbHhrpSZbJ10b1GINmqWr3A3Xi8TUGjL4OPZBtCi8b7zsU06PYSZKrUsZ0aeyB0Kwx3hG7j1vUIJ5X052njWxWFr4MfpBEGnSZ04YF1HTI7cunLyRxO4WXUkEEdDvFGuVAn6fa-iL0fWgQGJ3aOMC37eacJ02JI5YAaLfNDDMdaBMXOsXnjdPcNuvtrgaTbiShTsUyXbIJlskgKmifzeTZpyiLJklmGNTKez5N6wURRU0QUe7HIclxMZElndD7Lk3SWZ7N5Ns05x_2-FkW9SNNFnpP5DFsm1bV0E-lcwHKZpXkyUaxG5forl1KNJ-iN_VnZTGwZ93yqw8GR-UxJ590NxUuvsHy9ZHFNWUB9vlZkim94p2scLw934038avUyCVaVj6IfpG9CPeWmJXQbQ4-fT501f2O8aLY94dgIQ0LHkv4TAAD__zOadbk">