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.

84 lines
1.5 KiB

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// integers
unsigned int returnUnsigned();
void nonnegative_int() {
unsigned int x = returnUnsigned();
if (x < 0) {
int y = x / 0; // shouldn't report
}
}
int returnSigned();
void signed_int() {
int x = returnSigned();
if (x < 0) {
int y = 1 / 0; // should report
}
}
// pointers to integers
unsigned int* returnUnsignedPointer();
void nonnegative_int_ptr() {
unsigned int* x = returnUnsignedPointer();
if (*x < 0) {
int y = 1 / 0; // shouldn't report
}
}
int* returnSignedPointer();
void signed_int_ptr() {
int* x = returnSigned();
if (*x < 0) {
int y = 1 / 0; // should report
}
}
// struct with integer fields
struct foo {
unsigned int unsigned_int;
int signed_int;
};
struct foo* returnFoo();
void nonnegative_field() {
struct foo* x = returnFoo();
if (x->unsigned_int < 0) {
int y = 1 / 0; // shouldn't report
}
}
void signed_field() {
struct foo* x = returnFoo();
if (x->signed_int < 0) {
int y = 1 / 0; // should report
}
}
// array of integers
unsigned int* returnUnsignedArray();
int nonnegative_array() {
unsigned int* a = returnUnsignedArray();
if (a[0] < 0) {
int y = 1 / 0; // shouldn't report
}
}
int* returnSignedArray();
int signed_array() {
int* a = returnSignedArray();
if (a[0] < 0) {
int y = 1 / 0; // should report
}
}