1struct X { 2 int member1; 3 void func1(); 4protected: 5 int member2; 6 void func2(); 7private: 8 int member3; 9 void func3(); 10}; 11 12struct Y: protected X { 13 void doSomething(); 14}; 15 16class Z { 17public: 18 int member1; 19 void func1(); 20protected: 21 int member2; 22 void func2(); 23private: 24 int member3; 25 void func3(); 26}; 27 28void Y::doSomething() { 29 // RUN: c-index-test -code-completion-at=%s:30:9 %s | FileCheck -check-prefix=CHECK-SUPER-ACCESS %s 30 this->; 31 32 Z that; 33 // RUN: c-index-test -code-completion-at=%s:34:8 %s | FileCheck -check-prefix=CHECK-ACCESS %s 34 that. 35} 36 37// CHECK-SUPER-ACCESS: CXXMethod:{ResultType void}{TypedText doSomething}{LeftParen (}{RightParen )} (34) 38// CHECK-SUPER-ACCESS: CXXMethod:{ResultType void}{Informative X::}{TypedText func1}{LeftParen (}{RightParen )} (36) 39// CHECK-SUPER-ACCESS: CXXMethod:{ResultType void}{Informative X::}{TypedText func2}{LeftParen (}{RightParen )} (36) (inaccessible) 40// CHECK-SUPER-ACCESS: CXXMethod:{ResultType void}{Informative X::}{TypedText func3}{LeftParen (}{RightParen )} (36) (inaccessible) 41// CHECK-SUPER-ACCESS: FieldDecl:{ResultType int}{Informative X::}{TypedText member1} (37) 42// CHECK-SUPER-ACCESS: FieldDecl:{ResultType int}{Informative X::}{TypedText member2} (37) (inaccessible) 43// CHECK-SUPER-ACCESS: FieldDecl:{ResultType int}{Informative X::}{TypedText member3} (37) (inaccessible) 44// CHECK-SUPER-ACCESS: CXXMethod:{ResultType Y &}{TypedText operator=}{LeftParen (}{Placeholder const Y &}{RightParen )} (34) 45// CHECK-SUPER-ACCESS: CXXMethod:{ResultType X &}{Text X::}{TypedText operator=}{LeftParen (}{Placeholder const X &}{RightParen )} (36) 46// CHECK-SUPER-ACCESS: StructDecl:{TypedText X}{Text ::} (77) 47// CHECK-SUPER-ACCESS: StructDecl:{TypedText Y}{Text ::} (75) 48// CHECK-SUPER-ACCESS: CXXDestructor:{ResultType void}{Informative X::}{TypedText ~X}{LeftParen (}{RightParen )} (36) 49// CHECK-SUPER-ACCESS: CXXDestructor:{ResultType void}{TypedText ~Y}{LeftParen (}{RightParen )} (34) 50 51// CHECK-ACCESS: CXXMethod:{ResultType void}{TypedText func1}{LeftParen (}{RightParen )} (34) 52// CHECK-ACCESS: CXXMethod:{ResultType void}{TypedText func2}{LeftParen (}{RightParen )} (34) (inaccessible) 53// CHECK-ACCESS: CXXMethod:{ResultType void}{TypedText func3}{LeftParen (}{RightParen )} (34) (inaccessible) 54// CHECK-ACCESS: FieldDecl:{ResultType int}{TypedText member1} (35) 55// CHECK-ACCESS: FieldDecl:{ResultType int}{TypedText member2} (35) (inaccessible) 56// CHECK-ACCESS: FieldDecl:{ResultType int}{TypedText member3} (35) (inaccessible) 57// CHECK-ACCESS: CXXMethod:{ResultType Z &}{TypedText operator=}{LeftParen (}{Placeholder const Z &}{RightParen )} (34) 58// CHECK-ACCESS: ClassDecl:{TypedText Z}{Text ::} (75) 59// CHECK-ACCESS: CXXDestructor:{ResultType void}{TypedText ~Z}{LeftParen (}{RightParen )} (34) 60 61class P { 62protected: 63 int member; 64}; 65 66class Q : public P { 67public: 68 using P::member; 69}; 70 71void f(P x, Q y) { 72 // RUN: c-index-test -code-completion-at=%s:73:5 %s | FileCheck -check-prefix=CHECK-USING-INACCESSIBLE %s 73 x.; // member is inaccessible 74 // RUN: c-index-test -code-completion-at=%s:75:5 %s | FileCheck -check-prefix=CHECK-USING-ACCESSIBLE %s 75 y.; // member is accessible 76} 77 78// CHECK-USING-INACCESSIBLE: FieldDecl:{ResultType int}{TypedText member} (35) (inaccessible) 79// CHECK-USING-INACCESSIBLE: CXXMethod:{ResultType P &}{TypedText operator=}{LeftParen (}{Placeholder const P &}{RightParen )} (34) 80// CHECK-USING-INACCESSIBLE: ClassDecl:{TypedText P}{Text ::} (75) 81// CHECK-USING-INACCESSIBLE: CXXDestructor:{ResultType void}{TypedText ~P}{LeftParen (}{RightParen )} (34) 82 83// CHECK-USING-ACCESSIBLE: FieldDecl:{ResultType int}{TypedText member} (35) 84// CHECK-USING-ACCESSIBLE: CXXMethod:{ResultType Q &}{TypedText operator=}{LeftParen (}{Placeholder const Q &}{RightParen )} (34) 85// CHECK-USING-ACCESSIBLE: CXXMethod:{ResultType P &}{Text P::}{TypedText operator=}{LeftParen (}{Placeholder const P &}{RightParen )} (36) 86// CHECK-USING-ACCESSIBLE: ClassDecl:{TypedText P}{Text ::} (77) 87// CHECK-USING-ACCESSIBLE: ClassDecl:{TypedText Q}{Text ::} (75) 88// CHECK-USING-ACCESSIBLE: CXXDestructor:{ResultType void}{Informative P::}{TypedText ~P}{LeftParen (}{RightParen )} (36) 89// CHECK-USING-ACCESSIBLE: CXXDestructor:{ResultType void}{TypedText ~Q}{LeftParen (}{RightParen )} (34) 90