// RUN: %clang_cc1 -fsyntax-only -verify %s
// PR14993

namespace test1 {
  inline void f();  // expected-warning{{inline function 'test1::f' is not defined}}
  void test() { f(); }  // expected-note{{used here}}
}

namespace test2 {
  inline int f();
  void test() { (void)sizeof(f()); }
}

namespace test3 {
  void f();  // expected-warning{{inline function 'test3::f' is not defined}}
  inline void f();
  void test() { f(); }  // expected-note{{used here}}
}

namespace test4 {
  inline void error_on_zero(int);    // expected-warning{{inline function 'test4::error_on_zero' is not defined}}
  inline void error_on_zero(char*) {}
  void test() { error_on_zero(0); }  // expected-note{{used here}}
}

namespace test5 {
  struct X { void f(); };
  void test(X &x) { x.f(); }
}

namespace test6 {
  struct X { inline void f(); };  // expected-warning{{inline function 'test6::X::f' is not defined}}
  void test(X &x) { x.f(); }  // expected-note{{used here}}
}

namespace test7 {
  void f();  // expected-warning{{inline function 'test7::f' is not defined}}
  void test() { f(); } // no used-here note.
  inline void f();
}

namespace test8 {
  inline void foo() __attribute__((gnu_inline));
  void test() { foo(); }
}

namespace test9 {
  void foo();
  void test() { foo(); }
  inline void foo() __attribute__((gnu_inline));
}

namespace test10 {
  inline void foo();
  void test() { foo(); }
  inline void foo() __attribute__((gnu_inline));
}
