1// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -verify %s
2// PR14993
3
4namespace test1 {
5  inline void f();  // expected-warning{{inline function 'test1::f' is not defined}}
6  void test() { f(); }  // expected-note{{used here}}
7}
8
9namespace test2 {
10  inline int f();
11  void test() { (void)sizeof(f()); }
12}
13
14namespace test3 {
15  void f();  // expected-warning{{inline function 'test3::f' is not defined}}
16  inline void f();
17  void test() { f(); }  // expected-note{{used here}}
18}
19
20namespace test4 {
21  inline void error_on_zero(int);    // expected-warning{{inline function 'test4::error_on_zero' is not defined}}
22  inline void error_on_zero(char*) {}
23  void test() { error_on_zero(0); }  // expected-note{{used here}}
24}
25
26namespace test5 {
27  struct X { void f(); };
28  void test(X &x) { x.f(); }
29}
30
31namespace test6 {
32  struct X { inline void f(); };  // expected-warning{{inline function 'test6::X::f' is not defined}}
33  void test(X &x) { x.f(); }  // expected-note{{used here}}
34}
35
36namespace test7 {
37  void f();  // expected-warning{{inline function 'test7::f' is not defined}}
38  void test() { f(); } // no used-here note.
39  inline void f();
40}
41
42namespace test8 {
43  inline void foo() __attribute__((gnu_inline));
44  void test() { foo(); }
45}
46
47namespace test9 {
48  void foo();
49  void test() { foo(); }
50  inline void foo() __attribute__((gnu_inline));
51}
52
53namespace test10 {
54  inline void foo();
55  void test() { foo(); }
56  inline void foo() __attribute__((gnu_inline));
57}
58
59namespace test11 {
60  inline void foo() __attribute__((dllexport));
61  inline void bar() __attribute__((dllimport));
62  void test() { foo(); bar(); }
63}
64