[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeCompletion / accessibility.cpp
blob1ce95763db22c26bd99defc9efcdbf57be82097d
1 class X {
2 public:
3 int pub;
4 protected:
5 int prot;
6 private:
7 int priv;
8 };
10 class Unrelated {
11 public:
12 static int pub;
13 protected:
14 static int prot;
15 private:
16 static int priv;
19 class Y : public X {
20 int test() {
21 this->pub = 10;
22 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):11 %s -o - \
23 // RUN: | FileCheck -check-prefix=THIS %s
24 // THIS: priv (InBase,Inaccessible)
25 // THIS: prot (InBase)
26 // THIS: pub (InBase)
28 // Also check implicit 'this->', i.e. complete at the start of the line.
29 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \
30 // RUN: | FileCheck -check-prefix=THIS %s
32 X().pub + 10;
33 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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
39 Y().pub + 10;
40 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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)
46 this->X::pub = 10;
47 X::pub = 10;
48 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-2):14 %s -o - \
49 // RUN: | FileCheck -check-prefix=THIS-BASE %s
51 // THIS-BASE: priv (Inaccessible)
52 // THIS-BASE: prot : [#int#]prot
53 // THIS-BASE: pub : [#int#]pub
55 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):8 %s -o - \
56 // RUN: | FileCheck -check-prefix=THIS-BASE %s
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:%(line-3):22 %s -o - \
63 // RUN: | FileCheck -check-prefix=UNRELATED %s
64 // UNRELATED: priv (Inaccessible)
65 // UNRELATED: prot (Inaccessible)
66 // UNRELATED: pub : [#int#]pub
68 // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):20 %s -o - \
69 // RUN: | FileCheck -check-prefix=UNRELATED %s
70 // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-9):16 %s -o - \
71 // RUN: | FileCheck -check-prefix=UNRELATED %s
75 class Outer {
76 public:
77 static int pub;
78 protected:
79 static int prot;
80 private:
81 static int priv;
83 class Inner {
84 int test() {
85 Outer::pub = 10;
86 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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
92 // Also check the unqualified case.
93 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-8):1 %s -o - \
94 // RUN: | FileCheck -check-prefix=OUTER %s
99 class Base {
100 public:
101 int pub;
104 class Accessible : public Base {
107 class Inaccessible : private Base {
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:%(line-1):23 %s -o - \
114 // RUN: | FileCheck -check-prefix=ACCESSIBLE %s
115 // ACCESSIBLE: pub (InBase)
117 this->Inaccessible::pub = 10;
118 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):25 %s -o - \
119 // RUN: | FileCheck -check-prefix=INACCESSIBLE %s
120 // INACCESSIBLE: pub (InBase,Inaccessible)