forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -Wunused-value %s
 | |
| 
 | |
| void f() __attribute__((const));
 | |
| 
 | |
| namespace PR18571 {
 | |
| // Unevaluated contexts should not trigger unused result warnings.
 | |
| template <typename T>
 | |
| auto foo(T) -> decltype(f(), bool()) { // Should not warn.
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| void g() {
 | |
|   foo(1);
 | |
| }
 | |
| 
 | |
| void h() {
 | |
|   int i = 0;
 | |
|   (void)noexcept(++i); // expected-warning {{expression with side effects has no effect in an unevaluated context}}
 | |
|   decltype(i++) j = 0; // expected-warning {{expression with side effects has no effect in an unevaluated context}}
 | |
| }
 | |
| 
 | |
| struct S {
 | |
|   S operator++(int);
 | |
|   S(int i);
 | |
|   S();
 | |
| 
 | |
|   int& f();
 | |
|   S g();
 | |
| };
 | |
| 
 | |
| void j() {
 | |
|   S s;
 | |
|   int i = 0;
 | |
|   (void)noexcept(s++); // Ok
 | |
|   (void)noexcept(i++); // expected-warning {{expression with side effects has no effect in an unevaluated context}}
 | |
|   (void)noexcept(i = 5); // expected-warning {{expression with side effects has no effect in an unevaluated context}}
 | |
|   (void)noexcept(s = 5); // Ok
 | |
| 
 | |
|   (void)sizeof(s.f()); // Ok
 | |
|   (void)sizeof(s.f() = 5); // expected-warning {{expression with side effects has no effect in an unevaluated context}}
 | |
|   (void)noexcept(s.g() = 5); // Ok
 | |
| }
 | |
| 
 | |
| } |