// RUN: clang-cc -emit-llvm %s -triple x86_64-apple-darwin9 -o %t &&
struct C {
  void f();
  void g(int, ...);
};

// RUN: grep "define void @_ZN1C1fEv" %t | count 1 &&
void C::f() {
}

void test1() {
  C c;
  
// RUN: grep "call void @_ZN1C1fEv" %t | count 1 &&
  c.f();
  
// RUN: grep "call void (.struct.C\*, i32, ...)\* @_ZN1C1gEiz" %t | count 1 &&
  c.g(1, 2, 3);
}


struct S {
  // RUN: grep "define linkonce_odr void @_ZN1SC1Ev" %t &&
  inline S() { }
  // RUN: grep "define linkonce_odr void @_ZN1SC1Ev" %t &&
  inline ~S() { }
  
  
  // RUN: grep "define linkonce_odr void @_ZN1S9f_inline1Ev" %t &&
  void f_inline1() { }
  // RUN: grep "define linkonce_odr void @_ZN1S9f_inline2Ev" %t &&
  inline void f_inline2() { }
  
  // RUN: grep "define linkonce_odr void @_ZN1S1gEv" %t &&
  static void g() { }
  
  static void f();
};

// RUN: grep "define void @_ZN1S1fEv" %t &&
void S::f() {
}

void test2() {
  S s;
  
  s.f_inline1();
  s.f_inline2();
  
  S::g();
  
}

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

void test3() {
  T t1, t2;
  
  // RUN: grep "call void @_ZN1TpsERK1T" %t
  T result = t1 + t2;
}
