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:%(line-1):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:%(line-8):1 %s -o - \
    // RUN: | FileCheck -check-prefix=THIS %s

    X().pub + 10;
    // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):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:%(line-1):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:%(line-2):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:%(line-8):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:%(line-3):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:%(line-8):20 %s -o - \
    // RUN: | FileCheck -check-prefix=UNRELATED %s
    // RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-9):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:%(line-1):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:%(line-8):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:%(line-1):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:%(line-1):25 %s -o - \
    // RUN: | FileCheck -check-prefix=INACCESSIBLE %s
    // INACCESSIBLE: pub (InBase,Inaccessible)
  }
};
