xref: /llvm-project/clang/test/CodeCompletion/accessibility.cpp (revision cf9b25e0adc42546e4dc5ff51ee8674d45bac26b)
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