mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
Fix bugzilla 24733 - ImportC: #pragma pack(pop)
restores wrong alignment (#16821)
This commit is contained in:
parent
452ebe275a
commit
6884b433d2
2 changed files with 22 additions and 1 deletions
|
@ -5813,7 +5813,7 @@ final class CParser(AST) : Parser!AST
|
|||
if (len == 1) // stack is now empty
|
||||
packalign.setDefault();
|
||||
else
|
||||
packalign = (*this.packs)[len - 1];
|
||||
packalign = (*this.packs)[len - 2];
|
||||
return closingParen();
|
||||
}
|
||||
while (n.value == TOK.comma) // #pragma pack ( pop ,
|
||||
|
|
21
compiler/test/compilable/test24733.c
Normal file
21
compiler/test/compilable/test24733.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
struct S1 {unsigned char c;int i;};
|
||||
#pragma pack(push, 2)
|
||||
struct S2 {unsigned char c;int i;};
|
||||
#pragma pack(push, 1)
|
||||
struct S3 {unsigned char c;int i;};
|
||||
#pragma pack(pop)
|
||||
struct S4 {unsigned char c;int i;};
|
||||
#pragma pack(pop)
|
||||
struct S5 {unsigned char c;int i;};
|
||||
|
||||
_Static_assert(_Alignof(struct S1) == 4, "alignof S1");
|
||||
_Static_assert(_Alignof(struct S2) == 2, "alignof S2");
|
||||
_Static_assert(_Alignof(struct S3) == 1, "alignof S3");
|
||||
_Static_assert(_Alignof(struct S4) == 2, "alignof S4");
|
||||
_Static_assert(_Alignof(struct S5) == 4, "alignof S5");
|
||||
|
||||
_Static_assert(sizeof(struct S1) == 8, "sizeof S1");
|
||||
_Static_assert(sizeof(struct S2) == 6, "sizeof S2");
|
||||
_Static_assert(sizeof(struct S3) == 5, "sizeof S3");
|
||||
_Static_assert(sizeof(struct S4) == 6, "sizeof S4");
|
||||
_Static_assert(sizeof(struct S5) == 8, "sizeof S5");
|
Loading…
Add table
Add a link
Reference in a new issue