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