Bug 22955 – importC: wrong alignof for D struct with specified alignment
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2022-03-29T15:18:14Z
Last change time
2022-03-31T08:13:27Z
Keywords
ImportC, pull
Assigned to
No Owner
Creator
duser
Comments
Comment #0 by duser — 2022-03-29T15:18:14Z
using the "align (16) struct __uint128_t" struct from __builtins.di:
_Static_assert( _Alignof(__uint128_t) == 16, "" ); // fail
it gives the size of a pointer (4 or 8), same as if align() wasn't used
it has the correct alignment in D:
import __builtins;
pragma(msg, __uint128_t.alignof); // 16
_Alignas() in C doesn't have the problem:
struct S { _Alignas(16) unsigned long long a; unsigned long long b; };
_Static_assert( _Alignof(struct S) == 16, "this works" );
_Static_assert( sizeof(struct S) == 16, "this works" );
Comment #1 by dlang-bot — 2022-03-31T02:48:46Z
@WalterBright created dlang/dmd pull request #13930 "fix Issue 22955 - importC: wrong alignof for D struct with specified …" fixing this issue:
- fix Issue 22955 - importC: wrong alignof for D struct with specified alignment
https://github.com/dlang/dmd/pull/13930
Comment #2 by dlang-bot — 2022-03-31T08:13:27Z
dlang/dmd pull request #13930 "fix Issue 22955 - importC: wrong alignof for D struct with specified …" was merged into master:
- c02a98152928993e42ad9356b1c27817846ad76c by Walter Bright:
fix Issue 22955 - importC: wrong alignof for D struct with specified alignment
https://github.com/dlang/dmd/pull/13930