PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr44468.c
blobc4bd492656d474ee404126e7f32856d64dd87caf
1 #include <stddef.h>
3 struct S {
4 int i;
5 int j;
6 };
7 struct R {
8 int k;
9 struct S a;
11 struct Q {
12 float k;
13 struct S a;
15 struct Q s;
16 int __attribute__((noinline,noclone))
17 test1 (void *q)
19 struct S *b = (struct S *)((char *)q + sizeof (int));
20 s.a.i = 0;
21 b->i = 3;
22 return s.a.i;
24 int __attribute__((noinline,noclone))
25 test2 (void *q)
27 struct S *b = &((struct R *)q)->a;
28 s.a.i = 0;
29 b->i = 3;
30 return s.a.i;
32 int __attribute__((noinline,noclone))
33 test3 (void *q)
35 s.a.i = 0;
36 ((struct S *)((char *)q + sizeof (int)))->i = 3;
37 return s.a.i;
39 extern void abort (void);
40 int
41 main()
43 if (sizeof (float) != sizeof (int)
44 || offsetof (struct R, a) != sizeof (int)
45 || offsetof (struct Q, a) != sizeof (int))
46 return 0;
47 s.a.i = 1;
48 s.a.j = 2;
49 if (test1 ((void *)&s) != 3)
50 abort ();
51 s.a.i = 1;
52 s.a.j = 2;
53 if (test2 ((void *)&s) != 3)
54 abort ();
55 s.a.i = 1;
56 s.a.j = 2;
57 if (test3 ((void *)&s) != 3)
58 abort ();
59 return 0;