<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61608>61608</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Clang misbehaves with some huge alignment values specified in `alignas`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
frederick-vs-ja
</td>
</tr>
</table>
<pre>
Clang currently accept the following code but it should not ([Godbolt link](https://godbolt.org/z/5hvejToG4)).
```C++
// Weaker alignments are also correctly supported
struct alignas(0x1000'0000) B {};
static_assert(sizeof(B) == 0x1000'0000);
// Wrong cases
struct alignas(0x2000'0000) B1 {};
static_assert(sizeof(B1) == 0x1);
struct alignas(0x4000'0000) B2 {};
static_assert(sizeof(B2) == 0x1);
struct alignas(0x8000'0000) B3 {};
static_assert(sizeof(B3) == 0x1);
struct alignas(0x1'0000'0000) B4 {};
static_assert(sizeof(B4) == 0x1);
```
Four alignment values (0x20000000, 0x40000000, 0x80000000, and 0x100000000) are silently accepted but not correctly supported. We should decide either to correctly support these alignment values or to reject them.
----
A similar issue occurs for C's `_Alignas` ([Godbolt link](https://godbolt.org/z/3MrYbbK4T)):
```C
// Weaker alignments are also correctly supported
struct B {
_Alignas(0x10000000) char ch;
};
_Static_assert(sizeof(struct B) == 0x10000000, "");
// Wrong cases
struct B1 {
_Alignas(0x20000000) char ch;
};
_Static_assert(sizeof(struct B1) == 0x1, "");
struct B2 {
_Alignas(0x40000000) char ch;
};
_Static_assert(sizeof(struct B2) == 0x1, "");
struct B3 {
_Alignas(0x80000000) char ch;
};
_Static_assert(sizeof(struct B3) == 0x1, "");
struct B4 {
_Alignas(0x100000000) char ch;
};
_Static_assert(sizeof(struct B4) == 0x1, "");
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyslk-P4jgQxT9N5VICOZU_JIccmkbMYbWnHWm0p5aTFMTdJka2Q-_Mp18lAZoBuptpIVmCJC6_X-JXT5bOqXXLXEAyh2QRyM43xhYryzVbVb1Mdm7yLIPS1D-LRy3bNVadtdx6_RNlVfHWo28YV0Zr86r6x6ZmLDuPyqNrTKdrbI1HoAyS-TdTl0Z71Kp9gWQBlDXebx1ED0BLoOV6fD41dg20_AW0TJodP38332KgHCifgliAeIBUjOMRaN6P8e6wBv5g-cIWpVbrdsOtdygto9TOYGWs5apnd912a6zneix13naVH2ukA8rEf6EQAmgmhp8c5wizOcwWEM0PJdKr6kk6x9YDZU79YrMCyub9dIgWEC3wfJlj9e_E1vRfTjp27-LQGU54O0_4O9AlxhW5-EyObpejL8hlZ3LR7XLRF-TCo9abZHy7ZPyB5MGZpwRL0534EXdSd-zwuK0jwiOOX_3tKju5km29N5M4EPeudkqf9iLXQ-v1DXfF6lP8wYeerLlSNSMr37BFf6U1-r52fIlthumWn7ka5mymp686mUwm478HdGqjtLSonOsYTVV11uHKWHwEmjmEVDw97DclFV9OiOhv-29Z_hV_HxOin3meEXdKh30GDLcQEY_0h7g47EzVSItV82aKE1c9_fOerfYql_Fx8AAQDeMPU2QfFdex6W7YFynzPvChhD4Ai-8GdpFHn4NFH4BldwO7SK7PweIbHHgHsouAu0p2aLCgLqI6j3IZcBGmszxOo5CioClIhqKWcRKmocjLOl-JVRVzmYospzDP00AVJCgSEZFIIhI0jUUyI8kryrgMs4QhFryRSk-13m36pg-GMCnSMBVZoGXJ2g1HF6KWX8ek6TGTRWCLvmZSdmsHsdDKefe2ildeD2ee4UwDyQLHw81GuZIbuWOHr8o36MyGsenWV3LQbblSK8U1qrbPMnmMsqCzujiLLeWbrpxWZgO07Cn2P5OtNX2QAi0Hdge0HN7t_wAAAP__KxG-8Q">