brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · a6f523e Raw
100 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -o - %s2 3extern "C" int printf(...);4 5struct F {6  F() : iF(1), fF(2.0) {}7  int iF;8  float fF;9};10 11struct 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 {27public:28  A() : f(1.0), d(2.0), Ai(3) {}29  float f;30  double d;31  int Ai;32  F Af;33}; 34 35template <typename T> struct TT {36  int T::t::*pti;37};38 39struct I {40  typedef I t;41  int x;42};43 44void pr(const F& b) {45  printf(" %d %f\n", b.iF, b.fF);46}47 48void test_aggr_pdata(A& a1) {49  F A::* af = &A::Af;50  pr(a1.*af);51 52  (a1.*af).iF = 100;53  (a1.*af).fF = 200.00;54  printf(" %d %f\n", (a1.*af).iF, (a1.*af).fF);55  pr(a1.*af);56 57  (a1.*af).iF++;58  (a1.*af).fF--;59  --(a1.*af).fF;60  pr(a1.*af);61}62 63void test_aggr_pdata_1(A* pa) {64  F A::* af = &A::Af;65  pr(pa->*af);66 67  (pa->*af).iF = 100;68  (pa->*af).fF = 200.00;69  printf(" %d %f\n", (pa->*af).iF, (pa->*af).fF);70  pr(pa->*af);71 72  (pa->*af).iF++;73  (pa->*af).fF--;74  --(pa->*af).fF;75  pr(pa->*af);76}77 78int main() 79{80  A a1;81  TT<I> tt;82  I i;83  int A::* pa = &A::Ai;84  float A::* pf = &A::f;85  double A::* pd = &A::d;86  tt.pti = &I::x;87  printf("%d %d %d\n", &A::Ai, &A::f, &A::d);88  printf("%d\n", &A::B::iB);89  printf("%d\n", &A::B1::iB1);90  printf("%d\n", &A::f);91  printf("%d\n", &A::B::iV);92  printf("%d\n", &A::B1::iV);93  printf("%d\n", &A::B::V::iV);94  printf("%d\n", &A::B1::V::iV);95  printf("%d, %f, %f  \n", a1.*pa, a1.*pf, a1.*pd);96  printf("%d\n", i.*tt.pti);97  test_aggr_pdata(a1);98  test_aggr_pdata_1(&a1);99}100