2016-03-26 06:29:27 +08:00
// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -verify -std=c++11 %s
2013-02-01 16:13:20 +08:00
// 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 {
2019-09-27 20:25:19 +08:00
inline void foo ( ) __attribute__ ( ( gnu_inline ) ) ; // expected-warning {{'gnu_inline' attribute without 'extern' in C++ treated as externally available, this changed in Clang 10}}
2013-02-01 16:13:20 +08:00
void test ( ) { foo ( ) ; }
}
namespace test9 {
void foo ( ) ;
void test ( ) { foo ( ) ; }
2019-09-27 20:25:19 +08:00
inline void foo ( ) __attribute__ ( ( gnu_inline ) ) ; // expected-warning {{'gnu_inline' attribute without 'extern' in C++ treated as externally available, this changed in Clang 10}}
2013-02-01 16:13:20 +08:00
}
namespace test10 {
inline void foo ( ) ;
void test ( ) { foo ( ) ; }
2019-09-27 20:25:19 +08:00
inline void foo ( ) __attribute__ ( ( gnu_inline ) ) ; // expected-warning {{'gnu_inline' attribute without 'extern' in C++ treated as externally available, this changed in Clang 10}}
2013-02-01 16:13:20 +08:00
}
2014-05-23 04:45:53 +08:00
namespace test11 {
inline void foo ( ) __attribute__ ( ( dllexport ) ) ;
inline void bar ( ) __attribute__ ( ( dllimport ) ) ;
void test ( ) { foo ( ) ; bar ( ) ; }
}
2016-03-26 06:29:27 +08:00
namespace test12 {
template < typename > constexpr int _S_chk ( int * ) ;
decltype ( _S_chk < int > ( nullptr ) ) n ;
}