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; 22*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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. 29*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \ 30f1822ec4SIlya Biryukov // RUN: | FileCheck -check-prefix=THIS %s 31f1822ec4SIlya Biryukov 32f1822ec4SIlya Biryukov X().pub + 10; 33*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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; 40*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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; 48*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-2):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 // 55*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):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; 62*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-3):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 // 68*cf9b25e0SSam McCall // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):20 %s -o - \ 69f1822ec4SIlya Biryukov // RUN: | FileCheck -check-prefix=UNRELATED %s 70*cf9b25e0SSam McCall // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-9):16 %s -o - \ 71f1822ec4SIlya Biryukov // RUN: | FileCheck -check-prefix=UNRELATED %s 72f1822ec4SIlya Biryukov } 73f1822ec4SIlya Biryukov }; 7498397555SIlya Biryukov 7598397555SIlya Biryukov class Outer { 7698397555SIlya Biryukov public: 7798397555SIlya Biryukov static int pub; 7898397555SIlya Biryukov protected: 7998397555SIlya Biryukov static int prot; 8098397555SIlya Biryukov private: 8198397555SIlya Biryukov static int priv; 8298397555SIlya Biryukov 8398397555SIlya Biryukov class Inner { test()8498397555SIlya Biryukov int test() { 8598397555SIlya Biryukov Outer::pub = 10; 86*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):14 %s -o - \ 8798397555SIlya Biryukov // RUN: | FileCheck -check-prefix=OUTER %s 8898397555SIlya Biryukov // OUTER: priv : [#int#]priv 8998397555SIlya Biryukov // OUTER: prot : [#int#]prot 9098397555SIlya Biryukov // OUTER: pub : [#int#]pub 9198397555SIlya Biryukov 9298397555SIlya Biryukov // Also check the unqualified case. 93*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \ 9498397555SIlya Biryukov // RUN: | FileCheck -check-prefix=OUTER %s 9598397555SIlya Biryukov } 9698397555SIlya Biryukov }; 9798397555SIlya Biryukov }; 9898397555SIlya Biryukov 9998397555SIlya Biryukov class Base { 10098397555SIlya Biryukov public: 10198397555SIlya Biryukov int pub; 10298397555SIlya Biryukov }; 10398397555SIlya Biryukov 10498397555SIlya Biryukov class Accessible : public Base { 10598397555SIlya Biryukov }; 10698397555SIlya Biryukov 10798397555SIlya Biryukov class Inaccessible : private Base { 10898397555SIlya Biryukov }; 10998397555SIlya Biryukov 11098397555SIlya Biryukov class Test : public Accessible, public Inaccessible { test()11198397555SIlya Biryukov int test() { 11298397555SIlya Biryukov this->Accessible::pub = 10; 113*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):23 %s -o - \ 11498397555SIlya Biryukov // RUN: | FileCheck -check-prefix=ACCESSIBLE %s 11598397555SIlya Biryukov // ACCESSIBLE: pub (InBase) 11698397555SIlya Biryukov 11798397555SIlya Biryukov this->Inaccessible::pub = 10; 118*cf9b25e0SSam McCall // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):25 %s -o - \ 11998397555SIlya Biryukov // RUN: | FileCheck -check-prefix=INACCESSIBLE %s 12098397555SIlya Biryukov // INACCESSIBLE: pub (InBase,Inaccessible) 12198397555SIlya Biryukov } 12298397555SIlya Biryukov }; 123