You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
2.0 KiB

/*
* Copyright (c) 2018 - 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.
*/
#include <memory>
#include <string>
#include <vector>
struct S {
int f;
};
void deref_deleted_bad() {
auto s = new S{1};
delete s;
S tmp = *s;
}
S* return_deleted_bad() {
auto s = new S{1};
delete s;
return s;
}
S* reassign_deleted_ok() {
auto s = new S{1};
delete s;
s = new S{2};
return s;
}
void reassign_field_of_deleted_bad() {
auto s = new S{1};
delete s;
s->f = 7;
}
void reassign_field_of_reinitialized_ok(S* tmp) {
auto s = new S{1};
delete s;
s = tmp;
s->f = 7;
}
void double_delete_bad() {
auto s = new S{1};
delete s;
delete s;
}
S* delete_in_branch_bad(bool b) {
auto s = new S{1};
if (b) {
delete s;
}
return s;
}
void delete_in_branch_ok(bool b) {
auto s = new S{1};
if (b) {
delete s;
} else {
delete s;
}
}
void use_in_branch_bad(bool b) {
auto s = new S{1};
delete s;
if (b) {
auto tmp = *s;
}
}
void delete_in_loop_bad() {
auto s = new S{1};
for (int i = 0; i < 10; i++) {
delete s;
}
}
void delete_in_loop_ok() {
for (int i = 0; i < 10; i++) {
auto s = new S{1};
delete s;
}
}
void delete_ref_in_loop_ok(int j, std::vector<std::string> v) {
int i = 0;
for (int i = 0; i < 10; i++) {
auto s = &v[i];
delete s;
}
}
void use_in_loop_bad() {
auto s = new S{1};
delete s;
for (int i = 0; i < 10; i++) {
s->f = i;
}
}
S* gated_delete_abort_ok(bool b) {
auto s = new S{1};
if (b) {
delete s;
std::abort();
}
return s;
}
S* gated_exit_abort_ok(bool b) {
auto s = new S{1};
if (b) {
delete s;
exit(1);
}
return s;
}
S* gated_delete_throw_ok(bool b) {
auto s = new S{1};
if (b) {
delete s;
throw 5;
}
return s;
}