58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %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));
 | |
| }
 | 
