Reviewed By: sblackshear Differential Revision: D5543631 fbshipit-source-id: a175925master
							parent
							
								
									a718ebe8ec
								
							
						
					
					
						commit
						5deffbce24
					
				| @ -0,0 +1,77 @@ | ||||
| /*
 | ||||
|  * Copyright (c) 2017 - present Facebook, Inc. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * This source code is licensed under the BSD style license found in the | ||||
|  * LICENSE file in the root directory of this source tree. An additional grant | ||||
|  * of patent rights can be found in the PATENTS file in the same directory. | ||||
|  */ | ||||
| namespace cancellation_test { | ||||
| 
 | ||||
| struct Test { | ||||
|   int x, sz; | ||||
| 
 | ||||
|   int begin() const { return x; } | ||||
|   int end() const { return x + sz; } | ||||
|   int end2() const { return x - sz; } | ||||
| }; | ||||
| 
 | ||||
| bool is_size_zero(const Test& t) { return t.begin() == t.end(); } | ||||
| bool is_size_zero2(const Test& t) { return t.begin() == t.end2(); } | ||||
| 
 | ||||
| void size_zero_no_deref_ok() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 0}; | ||||
|   if (!is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_zero_deref_bad() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 0}; | ||||
|   if (is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_nonzero_no_deref2_ok() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 1}; | ||||
|   if (is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_nonzero_deref2_bad() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 1}; | ||||
|   if (!is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_zero_no_deref2_ok() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 0}; | ||||
|   if (!is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_zero_deref2_bad() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 0}; | ||||
|   if (is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_nonzero_no_deref_ok() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 1}; | ||||
|   if (is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| 
 | ||||
| void size_nonzero_deref_bad() { | ||||
|   int* p = nullptr; | ||||
|   Test t{1, 1}; | ||||
|   if (!is_size_zero(t)) | ||||
|     *p = 42; | ||||
| } | ||||
| } // namespace cancellation_test
 | ||||
					Loading…
					
					
				
		Reference in new issue