1 /* PR c/53037.  */
2 /* { dg-do compile } */
3 /* { dg-options "-O0" } */
4 /* { dg-skip-if "" { avr-*-* } } */
5 
6 typedef unsigned long long __u64
7   __attribute__((aligned(4),warn_if_not_aligned(8)));
8 
9 struct foo1
10 {
11   int i1;
12   int i2;
13   int i3;
14   __u64 x; /* { dg-warning "'x' offset 12 in 'struct foo1' isn't aligned to 8" } */
15 }; /* { dg-warning "alignment 4 of 'struct foo1' is less than 8" } */
16 
17 struct foo2
18 {
19   int i1;
20   int i2;
21   int i3;
22   __u64 x; /* { dg-warning "'x' offset 12 in 'struct foo2' isn't aligned to 8" } */
23 } __attribute__((aligned(8)));
24 
25 struct foo3
26 {
27   int i1;
28   int i3;
29   __u64 x;
30 }; /* { dg-warning "alignment 4 of 'struct foo3' is less than 8" } */
31 
32 struct foo4
33 {
34   int i1;
35   int i2;
36   __u64 x;
37 } __attribute__((aligned(8)));
38 
39 struct foo5
40 {
41   int i1;
42   int x __attribute__((warn_if_not_aligned(16))); /* { dg-warning "'x' offset 4 in 'struct foo5' isn't aligned to 16" } */
43 }; /* { dg-warning "alignment 4 of 'struct foo5' is less than 16" } */
44 
45 struct foo6
46 {
47   int i1;
48   int x __attribute__((warn_if_not_aligned(16))); /* { dg-warning "'x' offset 4 in 'struct foo6' isn't aligned to 16" } */
49 } __attribute__((aligned(16)));
50 
51 struct foo7
52 {
53   int i1;
54   int i2;
55   int i3;
56   int i4;
57   int x __attribute__((warn_if_not_aligned(16)));
58 } __attribute__((aligned(16)));
59 
60 union bar1
61 {
62   int i1;
63   __u64 x;
64 }; /* { dg-warning "alignment 4 of 'union bar1' is less than 8" } */
65 
66 union bar2
67 {
68   int i1;
69   __u64 x;
70 } __attribute__((aligned(8)));
71 
72 union bar3
73 {
74   int i1;
75   int x __attribute__((warn_if_not_aligned(16)));
76 }; /* { dg-warning "alignment 4 of 'union bar3' is less than 16" } */
77 
78 union bar4
79 {
80   int i1;
81   int x __attribute__((warn_if_not_aligned(16)));
82 } __attribute__((aligned(16)));
83