1 class X { 2 public: 3 int pub; 4 protected: 5 int prot; 6 private: 7 int priv; 8 }; 9 10 class Unrelated { 11 public: 12 static int pub; 13 protected: 14 static int prot; 15 private: 16 static int priv; 17 }; 18 19 class Y : public X { test()20 int test() { 21 this->pub = 10; 22 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):11 %s -o - \ 23 // RUN: | FileCheck -check-prefix=THIS %s 24 // THIS: priv (InBase,Inaccessible) 25 // THIS: prot (InBase) 26 // THIS: pub (InBase) 27 // 28 // Also check implicit 'this->', i.e. complete at the start of the line. 29 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \ 30 // RUN: | FileCheck -check-prefix=THIS %s 31 32 X().pub + 10; 33 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):9 %s -o - \ 34 // RUN: | FileCheck -check-prefix=X-OBJ %s 35 // X-OBJ: priv (Inaccessible) 36 // X-OBJ: prot (Inaccessible) 37 // X-OBJ: pub : [#int#]pub 38 39 Y().pub + 10; 40 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):9 %s -o - \ 41 // RUN: | FileCheck -check-prefix=Y-OBJ %s 42 // Y-OBJ: priv (InBase,Inaccessible) 43 // Y-OBJ: prot (InBase) 44 // Y-OBJ: pub (InBase) 45 46 this->X::pub = 10; 47 X::pub = 10; 48 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-2):14 %s -o - \ 49 // RUN: | FileCheck -check-prefix=THIS-BASE %s 50 // 51 // THIS-BASE: priv (Inaccessible) 52 // THIS-BASE: prot : [#int#]prot 53 // THIS-BASE: pub : [#int#]pub 54 // 55 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):8 %s -o - \ 56 // RUN: | FileCheck -check-prefix=THIS-BASE %s 57 58 59 this->Unrelated::pub = 10; // a check we don't crash in this cases. 60 Y().Unrelated::pub = 10; // a check we don't crash in this cases. 61 Unrelated::pub = 10; 62 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-3):22 %s -o - \ 63 // RUN: | FileCheck -check-prefix=UNRELATED %s 64 // UNRELATED: priv (Inaccessible) 65 // UNRELATED: prot (Inaccessible) 66 // UNRELATED: pub : [#int#]pub 67 // 68 // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):20 %s -o - \ 69 // RUN: | FileCheck -check-prefix=UNRELATED %s 70 // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-9):16 %s -o - \ 71 // RUN: | FileCheck -check-prefix=UNRELATED %s 72 } 73 }; 74 75 class Outer { 76 public: 77 static int pub; 78 protected: 79 static int prot; 80 private: 81 static int priv; 82 83 class Inner { test()84 int test() { 85 Outer::pub = 10; 86 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):14 %s -o - \ 87 // RUN: | FileCheck -check-prefix=OUTER %s 88 // OUTER: priv : [#int#]priv 89 // OUTER: prot : [#int#]prot 90 // OUTER: pub : [#int#]pub 91 92 // Also check the unqualified case. 93 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \ 94 // RUN: | FileCheck -check-prefix=OUTER %s 95 } 96 }; 97 }; 98 99 class Base { 100 public: 101 int pub; 102 }; 103 104 class Accessible : public Base { 105 }; 106 107 class Inaccessible : private Base { 108 }; 109 110 class Test : public Accessible, public Inaccessible { test()111 int test() { 112 this->Accessible::pub = 10; 113 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):23 %s -o - \ 114 // RUN: | FileCheck -check-prefix=ACCESSIBLE %s 115 // ACCESSIBLE: pub (InBase) 116 117 this->Inaccessible::pub = 10; 118 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):25 %s -o - \ 119 // RUN: | FileCheck -check-prefix=INACCESSIBLE %s 120 // INACCESSIBLE: pub (InBase,Inaccessible) 121 } 122 }; 123