Home | History | Annotate | Download | only in SemaCXX
      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