1 /* { dg-do compile } */
2 /* { dg-options "-Waddress-of-packed-member" } */
3
4 struct t {
5 char a;
6 int b;
7 int *c;
8 int d[10];
9 int *e[1];
10 _Complex float f;
11 } __attribute__((packed));
12
13 struct t t0;
14 struct t t10[10];
15 struct t t100[10][10];
16 struct t *t1;
17 struct t **t2;
18 struct t *bar();
19 struct t (*baz())[10];
20 struct t (*bazz())[10][10];
21 int *i1;
22 int **i2;
23 float f0, *f1;
24 __UINTPTR_TYPE__ u1;
25 __UINTPTR_TYPE__ baa();
26
27 void foo (void)
28 {
29 t1 = &t0; /* { dg-bogus "may result in an unaligned pointer value" } */
30 t1 = t10; /* { dg-bogus "may result in an unaligned pointer value" } */
31 t2 = &t1; /* { dg-bogus "may result in an unaligned pointer value" } */
32 t2 = t2; /* { dg-bogus "may result in an unaligned pointer value" } */
33 t2 = (struct t**)t2; /* { dg-bogus "may result in an unaligned pointer value" } */
34 t1 = (struct t*)t2; /* { dg-bogus "may result in an unaligned pointer value" } */
35 t1 = bar(); /* { dg-bogus "may result in an unaligned pointer value" } */
36 t1 = (struct t*) baz(); /* { dg-bogus "may result in an unaligned pointer value" } */
37 t1 = (struct t*) bazz(); /* { dg-bogus "may result in an unaligned pointer value" } */
38 t1 = *baz(); /* { dg-bogus "may result in an unaligned pointer value" } */
39 t1 = **bazz(); /* { dg-bogus "may result in an unaligned pointer value" } */
40 t1 = (struct t*) baa(); /* { dg-bogus "may result in an unaligned pointer value" } */
41 t2 = (struct t**) baa(); /* { dg-bogus "may result in an unaligned pointer value" } */
42 i1 = t0.c; /* { dg-bogus "may result in an unaligned pointer value" } */
43 i1 = t1->c; /* { dg-bogus "may result in an unaligned pointer value" } */
44 i1 = t10[0].c; /* { dg-bogus "may result in an unaligned pointer value" } */
45 u1 = (__UINTPTR_TYPE__) &t0; /* { dg-bogus "may result in an unaligned pointer value" } */
46 u1 = (__UINTPTR_TYPE__) t1; /* { dg-bogus "may result in an unaligned pointer value" } */
47 i1 = t10[0].e[0]; /* { dg-bogus "may result in an unaligned pointer value" } */
48 i1 = *&t0.c; /* { dg-bogus "may result in an unaligned pointer value" } */
49 i1 = *&*&t0.c; /* { dg-bogus "may result in an unaligned pointer value" } */
50 f0 = __real__ t0.f; /* { dg-bogus "may result in an unaligned pointer value" } */
51 f0 = __imag__ t0.f; /* { dg-bogus "may result in an unaligned pointer value" } */
52 f0 = *&__real__ t0.f; /* { dg-bogus "may result in an unaligned pointer value" } */
53 f0 = *&__imag__ t0.f; /* { dg-bogus "may result in an unaligned pointer value" } */
54 i1 = (&t0.c, (int*) 0); /* { dg-bogus "may result in an unaligned pointer value" } */
55 t2 = (struct t**) t10; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
56 t2 = (struct t**) t100; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
57 t2 = (struct t**) t1; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
58 t2 = (struct t**) bar(); /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
59 t2 = (struct t**) baz(); /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
60 t2 = (struct t**) bazz(); /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
61 i1 = &t0.b; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
62 i1 = &t1->b; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
63 i1 = &t10[0].b; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
64 i1 = t0.d; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
65 i1 = t1->d; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
66 i1 = t10[0].d; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
67 i1 = (int*) &t10[0].e[0]; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
68 i1 = (int*) t10[0].e; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
69 i2 = &t10[0].e[0]; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
70 i2 = t10[0].e; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
71 i2 = &*&t0.c; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
72 i2 = &*&*&t0.c; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
73 f1 = &__real__ t0.f; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
74 f1 = &__imag__ t0.f; /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
75 i1 = (0, (int*) &t0.c); /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
76 i1 = (int*) (0, &t0.c); /* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
77 i1 = (0, (int*)(0, &t0.c));/* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
78 i1 = (int*)(0, 1, (void*)(2, 3, (int*)(4, 5, &t0.c)));/* { dg-warning "may result in an unaligned pointer value" "" { target { ! default_packed } } } */
79 }