// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin9 -o - %s | FileCheck %s

struct C {
  void f();
  void g(int, ...);
};

// CHECK-LABEL: define{{.*}} void @_ZN1C1fEv
void C::f() {
}

// CHECK-LABEL: define{{.*}} void @_Z5test1v
void test1() {
  C c;

  // CHECK: call void @_ZN1C1fEv
  c.f();

  // CHECK: call void (ptr, i32, ...) @_ZN1C1gEiz
  c.g(1, 2, 3);
}


struct S {
  inline S() { }
  inline ~S() { }

  void f_inline1() { }
  inline void f_inline2() { }

  static void g() { }
  static void f();

  virtual void v() {}
};

// CHECK-LABEL: define{{.*}} void @_ZN1S1fEv
void S::f() {
}

void test2() {
  S s;

  s.f_inline1();
  s.f_inline2();

  S::g();
}

// S::S()
// CHECK: define linkonce_odr void @_ZN1SC1Ev{{.*}} unnamed_addr

// S::f_inline1()
// CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline1Ev

// S::f_inline2()
// CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline2Ev

// S::g()
// CHECK-LABEL: define linkonce_odr void @_ZN1S1gEv

// S::~S()
// CHECK: define linkonce_odr void @_ZN1SD1Ev{{.*}} unnamed_addr

struct T {
  T operator+(const T&);
};

// CHECK-LABEL: define{{.*}} void @_Z5test3v
void test3() {
  T t1, t2;

  // CHECK: call void @_ZN1TplERKS_
  T result = t1 + t2;
}

// S::S()
// CHECK: define linkonce_odr void @_ZN1SC2Ev{{.*}} unnamed_addr

// S::v()
// CHECK: define linkonce_odr void @_ZN1S1vEv{{.*}}unnamed_addr

// S::~S()
// CHECK: define linkonce_odr void @_ZN1SD2Ev{{.*}} unnamed_addr
