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