<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60465>60465</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect destructor parameter alignment on windows
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jacobly0
</td>
</tr>
</table>
<pre>
```c++
struct SE {
virtual ~SE() = default;
virtual void oE() {}
};
struct WE : virtual SE {
~WE() override = default;
void oE() override;
};
struct FT : virtual WE {
~FT() override;
int m_b alignas(2 * sizeof(void*));
};
FT::~FT() {
m_b = 0;
}
```
```
$ clang --version
clang version 15.0.7
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: D:/dep/msys64/ucrt64/bin
$ clang -O1 -target x86_64-windows repro.cpp -S -emit-llvm -o -
<snip>
define dso_local void @"??1FT@@UEAA@XZ"(ptr nocapture noundef nonnull align 16 dereferenceable(32) %0) unnamed_addr #
0 align 2 {
<snip>
%15 = getelementptr inbounds i8, ptr %0, i64 -24
store i32 0, ptr %15, align 16, !tbaa !7
ret void
}
<snip>
```
Note that both `%0` and `%15` are marked with `align 16` even though the offset between them is 24 bytes.
---
This is much reduced with shortened identifiers so that I can still associate it with the original code. This bug manifested as optimized builds crashing at runtime on a `movaps` instruction which was storing to a pointer that was not, in fact, 16 byte aligned, but which was derived from an 8-byte aligned pointer with an incorrectly marked alignment of 16 bytes and an offset that happened to be a multiple of 16 bytes.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyElc2OozgQx5_GuZSIwHyEHHLITBppLruH6dWs9tIyuADPGhvZRTI9h3n2lSGk09ltrUKE7fr6uf6OI7xXnUE8sPwTy08bMVFv3eG7aGytX-NNbeXrgRXx8jSMfwpPfGLx0ZObGoKvT8B21yUAgLNyNAkNv74-MV4yvgeWnkBiKyZNLL16_tv_bJUEe4vZfWK709V3d3qIu5b-9gQsPd4yPJL8-rZms2d0Tkn8P5R3CGvQm-NHHNXzO45vjxzV84cpb07KEAwvNQitOiM84yUHxo_g1U-0LeNlgGP8yPg-PB8zVc8sPbL0-Fb1HUyoEboQv0uxDFaZ79M9LvIMGi1MB1F0RueVNYthWbwuQZJv4-1usTwL1yGFBv0oi5ciiy7hq4y0Fx91Zrp69Q6FhMFK1MF3tF79WExfjCehNcqTcsF0ChvklcSR8Wrwr77IGK-mxtE8qJV5t4E34t8TiGimuaEsGOBwdHbbjCNEXyHCQVGk9XmAyEJ0TZN-9kaNLH1a5hJbZRCkty_aNuv5ZVnMOGdpxdIqqZ7DNIv_eDoeWRb_-Vcw8XIkB8Y2YqTJIRg7GYktGGvMpPWiPyQFSHTYokPToKg1Ml6mfFaT53F4T8aIAeWLkNIB4-mCFV8T8HvVH9khJEny-Rx0SKhxQEOBS5k68HhQJeOfISwt9T6DKjKIeLZm8GQdgko5xHeeSR4m6x7CmPGEaiHCe7fGOqS5XY_n7wHzP8_jb5YQqBcEtaUegjUAFjEII6_TJJ_nDmEQ7m-UcFGL6w2siAHPaIB6O3U9UI9g29YjQY10wdmCAygPPIP6ldBv7yGiKLqfPvfKB99hanpwKKdmrel76wgNSlASDalWofPg7bKDL9AIA55U0N172yhBCIqW2BnKqU4ZoaGxErcAc6V66mAQRrXoCSUID3YkNaifKKGelJYeGid8r0wHgsBNhtSAYA2I0ITBnsXoQwuUWS6w8Iu99Krp4SL8rGwIJQsCRqsMoVt4g9VYmk-DgVY08zAp5g4tqqMMS_VEdwklOnVGCa2zAwgDZXTvfysxb1oYUKaxzmFD-nXVb3YNZxRsu9bzs-DCrMLNhL0Yx7ndZKFGEDBMmtSo8T5wu5GHVO7TvdjgISl2eRoXcZ5s-kPWxFxgts_zZi_KMhe5yGqsUywLLGRSbtSBxzyNefhkuzTZ1u2uxaYVGaZZsm93LItxEEpvw_Wxta7bKO8nPBRxVuQbLWrUfv6v5dzgBWZjuBby08YdQkxUT51nWayVJ_-WhRRpPHxZWwMSF-msg1E4MWDo4F2bDFyvts3k9KEnGv1yazJedYr6qd42dmC8ChWur2h09jsGUauZyzNezdz_BAAA__8lAHMl">