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