xref: /aosp_15_r20/external/clang/test/CodeGenCXX/nested-base-member-access.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -o %t
2*67e74705SXin Li 
3*67e74705SXin Li extern "C" int printf(...);
4*67e74705SXin Li 
5*67e74705SXin Li struct M {
MM6*67e74705SXin Li   M(int i){ iM = i; }
7*67e74705SXin Li   int iM;
MPRM8*67e74705SXin Li   void MPR() { printf("iM = %d\n", iM); }
9*67e74705SXin Li 
10*67e74705SXin Li };
11*67e74705SXin Li 
12*67e74705SXin Li struct Q {
QQ13*67e74705SXin Li   Q(int i){ iQ = i; }
14*67e74705SXin Li   int iQ;
QPRQ15*67e74705SXin Li   void QPR() { printf("iQ = %d\n", iQ); }
16*67e74705SXin Li };
17*67e74705SXin Li 
18*67e74705SXin Li struct IQ {
IQIQ19*67e74705SXin Li   IQ(int i) { iIQ = i; }
IQPRIQ20*67e74705SXin Li   void IQPR() { printf("iIQ = %d\n", iIQ); }
21*67e74705SXin Li   int iIQ;
22*67e74705SXin Li };
23*67e74705SXin Li 
24*67e74705SXin Li struct L : IQ {
LL25*67e74705SXin Li   L(int i) : IQ(i+100) { iL = i; }
26*67e74705SXin Li   int iL;
27*67e74705SXin Li };
28*67e74705SXin Li 
29*67e74705SXin Li struct P : Q, L  {
PP30*67e74705SXin Li   P(int i) : Q(i+100), L(i+200) { iP = i; }
31*67e74705SXin Li   int iP;
PPRP32*67e74705SXin Li   void PPR() { printf("iP = %d\n", iP); }
33*67e74705SXin Li };
34*67e74705SXin Li 
35*67e74705SXin Li 
36*67e74705SXin Li struct N : M,P {
NN37*67e74705SXin Li   N() : M(100), P(200) {}
PRN38*67e74705SXin Li   void PR() {
39*67e74705SXin Li     this->MPR(); this->PPR(); this->QPR();
40*67e74705SXin Li     IQPR();
41*67e74705SXin Li     printf("iM = %d\n", iM);
42*67e74705SXin Li     printf("iP = %d\n", iP);
43*67e74705SXin Li     printf("iQ = %d\n", iQ);
44*67e74705SXin Li     printf("iL = %d\n", iL);
45*67e74705SXin Li     printf("iIQ = %d\n", iIQ);
46*67e74705SXin Li   }
47*67e74705SXin Li };
48*67e74705SXin Li 
main()49*67e74705SXin Li int main() {
50*67e74705SXin Li   N n1;
51*67e74705SXin Li   n1.PR();
52*67e74705SXin Li }
53