aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Analysis/loc-folding.cpp
blob: 1fcb0668e50fea5529ba3a696a3bdf6961be22c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// 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}}
  }
}