119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project// RUN: %clang_cc1 -emit-llvm -o - %s 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern "C" int printf(...); 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct F { 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project F() : iF(1), fF(2.0) {} 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int iF; 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project float fF; 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct V { 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project double d; 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int iV; 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct B : virtual V{ 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project double d; 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int iB; 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct B1 : virtual V{ 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project double d; 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int iB1; 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectclass A : public B, public B1 { 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectpublic: 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project A() : f(1.0), d(2.0), Ai(3) {} 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project float f; 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project double d; 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int Ai; 323984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt F Af; 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttemplate <typename T> struct TT { 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int T::t::*pti; 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct I { 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project typedef I t; 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int x; 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid pr(const F& b) { 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" %d %f\n", b.iF, b.fF); 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid test_aggr_pdata(A& a1) { 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project F A::* af = &A::Af; 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(a1.*af); 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (a1.*af).iF = 100; 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (a1.*af).fF = 200.00; 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" %d %f\n", (a1.*af).iF, (a1.*af).fF); 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(a1.*af); 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (a1.*af).iF++; 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (a1.*af).fF--; 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project --(a1.*af).fF; 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(a1.*af); 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid test_aggr_pdata_1(A* pa) { 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project F A::* af = &A::Af; 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(pa->*af); 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (pa->*af).iF = 100; 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (pa->*af).fF = 200.00; 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" %d %f\n", (pa->*af).iF, (pa->*af).fF); 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(pa->*af); 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (pa->*af).iF++; 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (pa->*af).fF--; 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project --(pa->*af).fF; 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pr(pa->*af); 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint main() 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project A a1; 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project TT<I> tt; 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project I i; 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int A::* pa = &A::Ai; 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project float A::* pf = &A::f; 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project double A::* pd = &A::d; 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project tt.pti = &I::x; 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d %d %d\n", &A::Ai, &A::f, &A::d); 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B::iB); 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B1::iB1); 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::f); 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B::iV); 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B1::iV); 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B::V::iV); 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", &A::B1::V::iV); 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d, %f, %f \n", a1.*pa, a1.*pf, a1.*pd); 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%d\n", i.*tt.pti); 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project test_aggr_pdata(a1); 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project test_aggr_pdata_1(&a1); 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project