blob: eee03c060f91c9d249838cec0025e3271f75d020 [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 Jahanian4ebdff52009-10-21 18:38:00 +000054int main()
55{
56 A a1;
57 int A::* pa = &A::Ai;
58 float A::* pf = &A::f;
59 double A::* pd = &A::d;
60 printf("%d %d %d\n", &A::Ai, &A::f, &A::d);
Fariborz Jahanianb25817a2009-10-21 21:01:47 +000061 printf("%d\n", &A::B::iB);
62 printf("%d\n", &A::B1::iB1);
63 printf("%d\n", &A::f);
64 printf("%d\n", &A::B::iV);
65 printf("%d\n", &A::B1::iV);
66 printf("%d\n", &A::B::V::iV);
67 printf("%d\n", &A::B1::V::iV);
Fariborz Jahanian52987dc2009-10-21 23:45:42 +000068 printf("%d, %f, %f \n", a1.*pa, a1.*pf, a1.*pd);
Fariborz Jahanianffba6622009-10-22 22:57:31 +000069 test_aggr_pdata(a1);
Fariborz Jahanian4ebdff52009-10-21 18:38:00 +000070}