69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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<typename> constexpr int _S_chk(int *);
 | |
|   decltype(_S_chk<int>(nullptr)) n;
 | |
| }
 |