2013-06-17 09:34:01 +08:00
// RUN: %clang_cc1 -std=c++98 %s -Wdeprecated -verify -triple x86_64-linux-gnu
// RUN: %clang_cc1 -std=c++11 %s -Wdeprecated -verify -triple x86_64-linux-gnu
// RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify -triple x86_64-linux-gnu
2013-06-13 10:02:51 +08:00
2013-06-17 09:34:01 +08:00
// RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify -triple x86_64-linux-gnu -Wno-deprecated-register -DNO_DEPRECATED_FLAGS
2013-06-17 08:01:58 +08:00
2013-06-15 05:05:24 +08:00
# include "Inputs/register.h"
2013-06-13 10:02:51 +08:00
void f ( ) throw ( ) ;
void g ( ) throw ( int ) ;
void h ( ) throw ( . . . ) ;
# if __cplusplus >= 201103L
// expected-warning@-4 {{dynamic exception specifications are deprecated}} expected-note@-4 {{use 'noexcept' instead}}
// expected-warning@-4 {{dynamic exception specifications are deprecated}} expected-note@-4 {{use 'noexcept(false)' instead}}
// expected-warning@-4 {{dynamic exception specifications are deprecated}} expected-note@-4 {{use 'noexcept(false)' instead}}
# endif
void stuff ( ) {
register int n ;
2013-06-17 08:01:58 +08:00
# if __cplusplus >= 201103L && !defined(NO_DEPRECATED_FLAGS)
2013-06-13 10:02:51 +08:00
// expected-warning@-2 {{'register' storage class specifier is deprecated}}
# endif
2013-06-17 09:34:01 +08:00
register int m asm ( " rbx " ) ; // no-warning
2013-06-15 05:05:24 +08:00
int k = to_int ( n ) ; // no-warning
2013-06-13 10:02:51 +08:00
bool b ;
+ + b ; // expected-warning {{incrementing expression of type bool is deprecated}}
2014-01-18 05:08:52 +08:00
char * p = " foo " ;
# if __cplusplus < 201103L
// expected-warning@-2 {{conversion from string literal to 'char *' is deprecated}}
# else
// expected-warning@-4 {{ISO C++11 does not allow conversion from string literal to 'char *'}}
# endif
2013-06-13 10:02:51 +08:00
}
struct S { int n ; } ;
struct T : private S {
2013-06-13 10:12:17 +08:00
S : : n ;
# if __cplusplus < 201103L
// expected-warning@-2 {{access declarations are deprecated; use using declarations instead}}
# else
// expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}}
# endif
2013-06-13 10:02:51 +08:00
} ;
2013-06-13 11:23:42 +08:00
# if __cplusplus >= 201103L
namespace DeprecatedCopy {
struct Assign {
Assign & operator = ( const Assign & ) ; // expected-warning {{definition of implicit copy constructor for 'Assign' is deprecated because it has a user-declared copy assignment operator}}
} ;
2013-06-13 11:34:55 +08:00
Assign a1 , a2 ( a1 ) ; // expected-note {{implicit copy constructor for 'Assign' first required here}}
2013-06-13 11:23:42 +08:00
struct Ctor {
Ctor ( ) ;
Ctor ( const Ctor & ) ; // expected-warning {{definition of implicit copy assignment operator for 'Ctor' is deprecated because it has a user-declared copy constructor}}
} ;
Ctor b1 , b2 ;
2013-06-13 11:34:55 +08:00
void f ( ) { b1 = b2 ; } // expected-note {{implicit copy assignment operator for 'Ctor' first required here}}
2013-06-13 11:23:42 +08:00
struct Dtor {
~ Dtor ( ) ;
// expected-warning@-1 {{definition of implicit copy constructor for 'Dtor' is deprecated because it has a user-declared destructor}}
// expected-warning@-2 {{definition of implicit copy assignment operator for 'Dtor' is deprecated because it has a user-declared destructor}}
} ;
2013-06-13 11:34:55 +08:00
Dtor c1 , c2 ( c1 ) ; // expected-note {{implicit copy constructor for 'Dtor' first required here}}
void g ( ) { c1 = c2 ; } // expected-note {{implicit copy assignment operator for 'Dtor' first required here}}
2013-06-13 11:23:42 +08:00
}
# endif