diff options
Diffstat (limited to 'test/CodeCompletion/accessibility.cpp')
-rw-r--r-- | test/CodeCompletion/accessibility.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/test/CodeCompletion/accessibility.cpp b/test/CodeCompletion/accessibility.cpp new file mode 100644 index 000000000000..a050efc9a73d --- /dev/null +++ b/test/CodeCompletion/accessibility.cpp @@ -0,0 +1,122 @@ +class X { +public: + int pub; +protected: + int prot; +private: + int priv; +}; + +class Unrelated { +public: + static int pub; +protected: + static int prot; +private: + static int priv; +}; + +class Y : public X { + int test() { + this->pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:21:11 %s -o - \ + // RUN: | FileCheck -check-prefix=THIS %s + // THIS: priv (InBase,Inaccessible) + // THIS: prot (InBase) + // THIS: pub (InBase) + // + // Also check implicit 'this->', i.e. complete at the start of the line. + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:21:1 %s -o - \ + // RUN: | FileCheck -check-prefix=THIS %s + + X().pub + 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:32:9 %s -o - \ + // RUN: | FileCheck -check-prefix=X-OBJ %s + // X-OBJ: priv (Inaccessible) + // X-OBJ: prot (Inaccessible) + // X-OBJ: pub : [#int#]pub + + Y().pub + 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:39:9 %s -o - \ + // RUN: | FileCheck -check-prefix=Y-OBJ %s + // Y-OBJ: priv (InBase,Inaccessible) + // Y-OBJ: prot (InBase) + // Y-OBJ: pub (InBase) + + this->X::pub = 10; + X::pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:46:14 %s -o - \ + // RUN: | FileCheck -check-prefix=THIS-BASE %s + // + // THIS-BASE: priv (Inaccessible) + // THIS-BASE: prot : [#int#]prot + // THIS-BASE: pub : [#int#]pub + // + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:47:8 %s -o - \ + // RUN: | FileCheck -check-prefix=THIS-BASE %s + + + this->Unrelated::pub = 10; // a check we don't crash in this cases. + Y().Unrelated::pub = 10; // a check we don't crash in this cases. + Unrelated::pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:22 %s -o - \ + // RUN: | FileCheck -check-prefix=UNRELATED %s + // UNRELATED: priv (Inaccessible) + // UNRELATED: prot (Inaccessible) + // UNRELATED: pub : [#int#]pub + // + // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:60:20 %s -o - \ + // RUN: | FileCheck -check-prefix=UNRELATED %s + // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:61:16 %s -o - \ + // RUN: | FileCheck -check-prefix=UNRELATED %s + } +}; + +class Outer { + public: + static int pub; + protected: + static int prot; + private: + static int priv; + + class Inner { + int test() { + Outer::pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:85:14 %s -o - \ + // RUN: | FileCheck -check-prefix=OUTER %s + // OUTER: priv : [#int#]priv + // OUTER: prot : [#int#]prot + // OUTER: pub : [#int#]pub + + // Also check the unqualified case. + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:85:1 %s -o - \ + // RUN: | FileCheck -check-prefix=OUTER %s + } + }; +}; + +class Base { +public: + int pub; +}; + +class Accessible : public Base { +}; + +class Inaccessible : private Base { +}; + +class Test : public Accessible, public Inaccessible { + int test() { + this->Accessible::pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:112:23 %s -o - \ + // RUN: | FileCheck -check-prefix=ACCESSIBLE %s + // ACCESSIBLE: pub (InBase) + + this->Inaccessible::pub = 10; + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:117:25 %s -o - \ + // RUN: | FileCheck -check-prefix=INACCESSIBLE %s + // INACCESSIBLE: pub (InBase,Inaccessible) + } +}; |