blob: 1fcb0668e50fea5529ba3a696a3bdf6961be22c7 [file] [log] [blame] [edit]
// RUN: %clang_analyze_cc1 -verify %s -analyzer-config eagerly-assume=false \
// RUN: -analyzer-checker=core,debug.ExprInspection
void clang_analyzer_eval(bool);
void element_constant() {
char arr[10];
clang_analyzer_eval(arr + 1 > arr); // expected-warning{{TRUE}}
}
void element_known() {
char arr[10];
int off = 1;
clang_analyzer_eval(arr + off > arr); // expected-warning{{TRUE}}
}
void element_constrained(int off) {
char arr[10];
if (off == 1) {
clang_analyzer_eval(arr + off > arr); // expected-warning{{TRUE}}
}
}
void element_unknown(int off) {
char arr[10];
clang_analyzer_eval(arr + off > arr); // expected-warning{{UNKNOWN}}
}
void element_complex(int off) {
char arr[10];
int comp = off * 2;
if (off == 1) {
clang_analyzer_eval(arr + comp); // expected-warning{{TRUE}}
}
}
void base_constant(int *arr) {
clang_analyzer_eval(arr + 1 > arr); // expected-warning{{TRUE}}
}
void base_known(int *arr) {
int off = 1;
clang_analyzer_eval(arr + off > arr); // expected-warning{{TRUE}}
}
void base_constrained(int *arr, int off) {
if (off == 1) {
clang_analyzer_eval(arr + off > arr); // expected-warning{{TRUE}}
}
}
void base_unknown(int *arr, int off) {
clang_analyzer_eval(arr + off > arr); // expected-warning{{UNKNOWN}}
}
void base_complex(int *arr, int off) {
int comp = off * 2;
if (off == 1) {
clang_analyzer_eval(arr + comp > arr); // expected-warning{{TRUE}}
}
}