1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // PR14993 3 4 namespace test1 { 5 inline void f(); // expected-warning{{inline function 'test1::f' is not defined}} 6 void test() { f(); } // expected-note{{used here}} 7 } 8 9 namespace test2 { 10 inline int f(); 11 void test() { (void)sizeof(f()); } 12 } 13 14 namespace 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 20 namespace 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 26 namespace test5 { 27 struct X { void f(); }; 28 void test(X &x) { x.f(); } 29 } 30 31 namespace 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 36 namespace 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 42 namespace test8 { 43 inline void foo() __attribute__((gnu_inline)); 44 void test() { foo(); } 45 } 46 47 namespace test9 { 48 void foo(); 49 void test() { foo(); } 50 inline void foo() __attribute__((gnu_inline)); 51 } 52 53 namespace test10 { 54 inline void foo(); 55 void test() { foo(); } 56 inline void foo() __attribute__((gnu_inline)); 57 } 58