// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -verify -std=c++11 %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)); } namespace test11 { inline void foo() __attribute__((dllexport)); inline void bar() __attribute__((dllimport)); void test() { foo(); bar(); } } namespace test12 { template constexpr int _S_chk(int *); decltype(_S_chk(nullptr)) n; }