aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccgen.c3
-rw-r--r--tests/tcctest.c16
2 files changed, 17 insertions, 2 deletions
diff --git a/tccgen.c b/tccgen.c
index 75959ad..a411e8f 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -3610,8 +3610,7 @@ static void struct_decl(CType *type, AttributeDef *ad, int u)
alignoverride = 0;
if (ad1.a.aligned) {
int speca = 1 << (ad1.a.aligned - 1);
- if (align < speca)
- alignoverride = speca;
+ alignoverride = speca;
} else if (ad1.a.packed || ad->a.packed) {
alignoverride = 1;
} else if (*tcc_state->pack_stack_ptr) {
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 68f8db6..6c414f7 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -1087,6 +1087,18 @@ struct Large {
};
} __attribute__((aligned(2 * sizeof(long))));
+typedef unsigned long long __attribute__((aligned(4))) unaligned_u64;
+
+struct aligntest9 {
+ unsigned int buf_nr;
+ unaligned_u64 start_lba;
+};
+
+struct aligntest10 {
+ unsigned int buf_nr;
+ unsigned long long start_lba;
+};
+
void struct_test()
{
struct1 *s;
@@ -1136,6 +1148,10 @@ void struct_test()
sizeof(struct aligntest7), __alignof__(struct aligntest7));
printf("aligntest8 sizeof=%d alignof=%d\n",
sizeof(struct aligntest8), __alignof__(struct aligntest8));
+ printf("aligntest9 sizeof=%d alignof=%d\n",
+ sizeof(struct aligntest9), __alignof__(struct aligntest9));
+ printf("aligntest10 sizeof=%d alignof=%d\n",
+ sizeof(struct aligntest10), __alignof__(struct aligntest10));
printf("altest5 sizeof=%d alignof=%d\n",
sizeof(altest5), __alignof__(altest5));
printf("altest6 sizeof=%d alignof=%d\n",