forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %check_clang_tidy %s performance-noexcept-move-constructor %t
 | 
						|
 | 
						|
class A {
 | 
						|
  A(A &&);
 | 
						|
  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: move constructors should be marked noexcept [performance-noexcept-move-constructor]
 | 
						|
  A &operator=(A &&);
 | 
						|
  // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: move assignment operators should
 | 
						|
};
 | 
						|
 | 
						|
struct B {
 | 
						|
  static constexpr bool kFalse = false;
 | 
						|
  B(B &&) noexcept(kFalse);
 | 
						|
  // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: noexcept specifier on the move constructor evaluates to 'false' [performance-noexcept-move-constructor]
 | 
						|
};
 | 
						|
 | 
						|
class OK {};
 | 
						|
 | 
						|
void f() {
 | 
						|
  OK a;
 | 
						|
  a = OK();
 | 
						|
}
 | 
						|
 | 
						|
class OK1 {
 | 
						|
public:
 | 
						|
  OK1();
 | 
						|
  OK1(const OK1 &);
 | 
						|
  OK1(OK1 &&) noexcept;
 | 
						|
  OK1 &operator=(OK1 &&) noexcept;
 | 
						|
  void f();
 | 
						|
  void g() noexcept;
 | 
						|
};
 | 
						|
 | 
						|
class OK2 {
 | 
						|
  static constexpr bool kTrue = true;
 | 
						|
 | 
						|
public:
 | 
						|
  OK2(OK2 &&) noexcept(true) {}
 | 
						|
  OK2 &operator=(OK2 &&) noexcept(kTrue) { return *this; }
 | 
						|
};
 | 
						|
 | 
						|
struct OK3 {
 | 
						|
  OK3(OK3 &&) noexcept(false) {}
 | 
						|
  OK3 &operator=(OK3 &&) = delete;
 | 
						|
};
 | 
						|
 | 
						|
struct OK4 {
 | 
						|
  OK4(OK4 &&) noexcept = default;
 | 
						|
  OK4 &operator=(OK4 &&) noexcept = default;
 | 
						|
};
 | 
						|
 | 
						|
struct OK5 {
 | 
						|
  OK5(OK5 &&) noexcept(true) = default;
 | 
						|
  OK5 &operator=(OK5 &&) noexcept(true) = default;
 | 
						|
};
 |