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