Clang Project

clang_source_code/test/CodeCompletion/accessibility.cpp
1class X {
2public:
3 int pub;
4protected:
5 int prot;
6private:
7 int priv;
8};
9
10class Unrelated {
11public:
12  static int pub;
13protected:
14  static int prot;
15private:
16  static int priv;
17};
18
19class Y : public X {
20  int test() {
21    this->pub = 10;
22    // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:21: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:21: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:32: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:39: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:46: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:47: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:59: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:60:20 %s -o - \
69    // RUN: | FileCheck -check-prefix=UNRELATED %s
70    // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:61:16 %s -o - \
71    // RUN: | FileCheck -check-prefix=UNRELATED %s
72  }
73};
74
75class Outer {
76 public:
77  static int pub;
78 protected:
79  static int prot;
80 private:
81  static int priv;
82
83  class Inner {
84    int test() {
85      Outer::pub = 10;
86    // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:85: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:85:1 %s -o - \
94    // RUN: | FileCheck -check-prefix=OUTER %s
95    }
96  };
97};
98
99class Base {
100public:
101  int pub;
102};
103
104class Accessible : public Base {
105};
106
107class Inaccessible : private Base {
108};
109
110class Test : public Accessible, public Inaccessible {
111  int test() {
112    this->Accessible::pub = 10;
113    // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:112: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:117:25 %s -o - \
119    // RUN: | FileCheck -check-prefix=INACCESSIBLE %s
120    // INACCESSIBLE: pub (InBase,Inaccessible)
121  }
122};
123