re PR middle-end/13146 (inheritance for nonoverlapping_component_refs_p)
[gcc.git] / gcc / testsuite / g++.dg / tree-ssa / pr13146.C
1 /* { dg-do link } */
2 /* { dg-options "-O -fstrict-aliasing" } */
3
4 class first
5 {
6 public:
7 double d;
8 int f1;
9 };
10
11 class middle : public first
12 {
13 };
14
15 class second : public middle
16 {
17 public:
18 int f2;
19 short a;
20 };
21
22 class third
23 {
24 public:
25 char a;
26 char b;
27 };
28
29 class multi: public third, public second
30 {
31 public:
32 short s;
33 char f3;
34 };
35
36 extern void link_error ();
37
38 void
39 foo (first *s1, second *s2)
40 {
41 s1->f1 = 0;
42 s2->f2 = 0;
43 s1->f1++;
44 s2->f2++;
45 s1->f1++;
46 s2->f2++;
47 if (s1->f1 != 2)
48 link_error ();
49 }
50
51 void
52 bar (first *s1, multi *s3)
53 {
54 s1->f1 = 0;
55 s3->f3 = 0;
56 s1->f1++;
57 s3->f3++;
58 s1->f1++;
59 s3->f3++;
60 if (s1->f1 != 2)
61 link_error ();
62 }
63
64
65 int
66 main()
67 {
68 first a;
69 second b;
70 multi c;
71 foo (&a, &b);
72 bar (&a, &c);
73 return 0;
74 }