blob: a7b4cc2f7afb901462d53b1010d88665f7d28f2e [file] [log] [blame]
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +00001// RUN: clang-cc -emit-llvm -o - %s
2
3extern "C" int printf(...);
4
Fariborz Jahanianffba6622009-10-22 22:57:31 +00005struct F {
6 F() : iF(1), fF(2.0) {}
7 int iF;
8 float fF;
9};
10
Fariborz Jahanianb25817a2009-10-21 21:01:47 +000011struct V {
12 double d;
13 int iV;
14};
15
16struct B : virtual V{
17 double d;
18 int iB;
19};
20
21struct B1 : virtual V{
22 double d;
23 int iB1;
24};
25
26class A : public B, public B1 {
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000027public:
Fariborz Jahanian52987dc2009-10-21 23:45:42 +000028 A() : f(1.0), d(2.0), Ai(3) {}
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000029 float f;
30 double d;
31 int Ai;
Fariborz Jahanianffba6622009-10-22 22:57:31 +000032 F Af;
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000033};
34
Fariborz Jahanianffba6622009-10-22 22:57:31 +000035void pr(const F& b) {
36 printf(" %d %f\n", b.iF, b.fF);
37}
38
39void test_aggr_pdata(A& a1) {
40 F A::* af = &A::Af;
41 pr(a1.*af);
42
43 (a1.*af).iF = 100;
44 (a1.*af).fF = 200.00;
45 printf(" %d %f\n", (a1.*af).iF, (a1.*af).fF);
46 pr(a1.*af);
47
48 (a1.*af).iF++;
49 (a1.*af).fF--;
50 --(a1.*af).fF;
51 pr(a1.*af);
52}
53
Fariborz Jahanian038374f2009-10-26 21:58:25 +000054void test_aggr_pdata_1(A* pa) {
55 F A::* af = &A::Af;
56 pr(pa->*af);
57
58 (pa->*af).iF = 100;
59 (pa->*af).fF = 200.00;
60 printf(" %d %f\n", (pa->*af).iF, (pa->*af).fF);
61 pr(pa->*af);
62
63 (pa->*af).iF++;
64 (pa->*af).fF--;
65 --(pa->*af).fF;
66 pr(pa->*af);
67}
68
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000069int main()
70{
71 A a1;
72 int A::* pa = &A::Ai;
73 float A::* pf = &A::f;
74 double A::* pd = &A::d;
75 printf("%d %d %d\n", &A::Ai, &A::f, &A::d);
Fariborz Jahanianb25817a2009-10-21 21:01:47 +000076 printf("%d\n", &A::B::iB);
77 printf("%d\n", &A::B1::iB1);
78 printf("%d\n", &A::f);
79 printf("%d\n", &A::B::iV);
80 printf("%d\n", &A::B1::iV);
81 printf("%d\n", &A::B::V::iV);
82 printf("%d\n", &A::B1::V::iV);
Fariborz Jahanian52987dc2009-10-21 23:45:42 +000083 printf("%d, %f, %f \n", a1.*pa, a1.*pf, a1.*pd);
Fariborz Jahanianffba6622009-10-22 22:57:31 +000084 test_aggr_pdata(a1);
Fariborz Jahanian038374f2009-10-26 21:58:25 +000085 test_aggr_pdata_1(&a1);
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000086}