// RUN: %clang_cc1 %s -triple spir -emit-llvm -O0 -o - | FileCheck %s

struct B {
  int mb;
};

class D : public B {
public:
  int getmb() { return mb; }
};

void foo() {
  D d;
  //CHECK-LABEL: foo
  //CHECK: addrspacecast ptr %d to ptr addrspace(4)
  //CHECK: call spir_func noundef i32 @_ZNU3AS41D5getmbEv(ptr addrspace(4)
  d.getmb();
}

//Derived and Base are in the same address space.

//CHECK: define linkonce_odr spir_func noundef i32 @_ZNU3AS41D5getmbEv(ptr addrspace(4) {{[^,]*}} %this)


// Calling base method through multiple inheritance.

class B2 {
  public:
    void baseMethod() const {  }
    int &getRef() { return bb; }
    int bb;
};

class Derived : public B, public B2 {
  public:
    void work() const { baseMethod(); }
    // CHECK-LABEL: work
};

void pr43145(const Derived *argDerived) {
  argDerived->work();
}

// Casting from base to derived.

void pr43145_2(B *argB) {
  Derived *x = (Derived*)argB;
  // CHECK-LABEL: @_Z9pr43145_2
}

// Assigning to reference returned by base class method through derived class.

void pr43145_3(int n) {
  Derived d;
  d.getRef() = n;

  // CHECK-LABEL: @_Z9pr43145_3
  // CHECK: addrspacecast ptr %d to ptr addrspace(4)
  // CHECK: call {{.*}} @_ZNU3AS42B26getRefEv

  private Derived *pd = &d;
  pd->getRef() = n;

  // CHECK: addrspacecast ptr %2 to ptr addrspace(4)
  // CHECK: call {{.*}} @_ZNU3AS42B26getRefEv
}

// Implicit conversion of derived to base.

void functionWithBaseArgPtr(class B2 *b) {}
void functionWithBaseArgRef(class B2 &b) {}

void pr43145_4() {
  Derived d;
  functionWithBaseArgPtr(&d);
  functionWithBaseArgRef(d);
}
