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
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
|
|
}
|
|
}
|