150
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
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 {
|
|
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 };
|