brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.7 KiB · c0eb73e Raw
228 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify %s2 3void clang_analyzer_eval(int);4 5void comparison_lt(int x, int y) {6  if (x < y) {7    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}}8    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}}9    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}10    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}11    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}12    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}13    clang_analyzer_eval(x >= y); // expected-warning{{FALSE}}14    clang_analyzer_eval(y <= x); // expected-warning{{FALSE}}15    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}16    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}17    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}18    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}19  } else {20    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}21    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}22    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}23    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}24    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}25    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}26    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}27    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}28    clang_analyzer_eval(x == y); // expected-warning{{TRUE}} expected-warning{{FALSE}}29    clang_analyzer_eval(y == x); // expected-warning{{TRUE}} expected-warning{{FALSE}}30    clang_analyzer_eval(x != y); // expected-warning{{TRUE}} expected-warning{{FALSE}}31    clang_analyzer_eval(y != x); // expected-warning{{TRUE}} expected-warning{{FALSE}}32  }33}34 35void comparison_gt(int x, int y) {36  if (x > y) {37    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}38    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}39    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}}40    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}}41    clang_analyzer_eval(x <= y); // expected-warning{{FALSE}}42    clang_analyzer_eval(y >= x); // expected-warning{{FALSE}}43    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}44    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}45    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}46    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}47    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}48    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}49  } else {50    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}51    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}52    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}53    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}54    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}55    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}56    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}57    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}58    clang_analyzer_eval(x == y); // expected-warning{{TRUE}} expected-warning{{FALSE}}59    clang_analyzer_eval(y == x); // expected-warning{{TRUE}} expected-warning{{FALSE}}60    clang_analyzer_eval(x != y); // expected-warning{{TRUE}} expected-warning{{FALSE}}61    clang_analyzer_eval(y != x); // expected-warning{{TRUE}} expected-warning{{FALSE}}62  }63}64 65void comparison_le(int x, int y) {66  if (x <= y) {67    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}68    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}69    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}70    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}71    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}72    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}73    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}74    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}75    clang_analyzer_eval(x == y); // expected-warning{{TRUE}} expected-warning{{FALSE}}76    clang_analyzer_eval(y == x); // expected-warning{{TRUE}} expected-warning{{FALSE}}77    clang_analyzer_eval(x != y); // expected-warning{{TRUE}} expected-warning{{FALSE}}78    clang_analyzer_eval(y != x); // expected-warning{{TRUE}} expected-warning{{FALSE}}79  } else {80    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}81    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}82    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}}83    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}}84    clang_analyzer_eval(x <= y); // expected-warning{{FALSE}}85    clang_analyzer_eval(y >= x); // expected-warning{{FALSE}}86    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}87    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}88    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}89    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}90    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}91    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}92  }93}94 95void comparison_ge(int x, int y) {96  if (x >= y) {97    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}98    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}99    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}100    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}101    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}102    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}103    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}104    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}105    clang_analyzer_eval(x == y); // expected-warning{{TRUE}} expected-warning{{FALSE}}106    clang_analyzer_eval(y == x); // expected-warning{{TRUE}} expected-warning{{FALSE}}107    clang_analyzer_eval(x != y); // expected-warning{{TRUE}} expected-warning{{FALSE}}108    clang_analyzer_eval(y != x); // expected-warning{{TRUE}} expected-warning{{FALSE}}109  } else {110    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}}111    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}}112    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}113    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}114    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}115    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}116    clang_analyzer_eval(x >= y); // expected-warning{{FALSE}}117    clang_analyzer_eval(y <= x); // expected-warning{{FALSE}}118    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}119    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}120    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}121    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}122  }123}124 125void comparison_eq(int x, int y) {126  if (x == y) {127    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}128    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}129    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}130    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}131    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}132    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}133    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}134    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}135    clang_analyzer_eval(x == y); // expected-warning{{TRUE}}136    clang_analyzer_eval(y == x); // expected-warning{{TRUE}}137    clang_analyzer_eval(x != y); // expected-warning{{FALSE}}138    clang_analyzer_eval(y != x); // expected-warning{{FALSE}}139  } else {140    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}141    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}142    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}143    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}144    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}145    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}146    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}147    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}148    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}149    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}150    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}151    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}152  }153}154 155void comparison_ne(int x, int y) {156  if (x != y) {157    clang_analyzer_eval(x < y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}158    clang_analyzer_eval(y > x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}159    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}160    clang_analyzer_eval(y < x);  // expected-warning{{TRUE}} expected-warning{{FALSE}}161    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}162    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}163    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}} expected-warning{{FALSE}}164    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}} expected-warning{{FALSE}}165    clang_analyzer_eval(x == y); // expected-warning{{FALSE}}166    clang_analyzer_eval(y == x); // expected-warning{{FALSE}}167    clang_analyzer_eval(x != y); // expected-warning{{TRUE}}168    clang_analyzer_eval(y != x); // expected-warning{{TRUE}}169  } else {170    clang_analyzer_eval(x < y);  // expected-warning{{FALSE}}171    clang_analyzer_eval(y > x);  // expected-warning{{FALSE}}172    clang_analyzer_eval(x > y);  // expected-warning{{FALSE}}173    clang_analyzer_eval(y < x);  // expected-warning{{FALSE}}174    clang_analyzer_eval(x <= y); // expected-warning{{TRUE}}175    clang_analyzer_eval(y >= x); // expected-warning{{TRUE}}176    clang_analyzer_eval(x >= y); // expected-warning{{TRUE}}177    clang_analyzer_eval(y <= x); // expected-warning{{TRUE}}178    clang_analyzer_eval(x == y); // expected-warning{{TRUE}}179    clang_analyzer_eval(y == x); // expected-warning{{TRUE}}180    clang_analyzer_eval(x != y); // expected-warning{{FALSE}}181    clang_analyzer_eval(y != x); // expected-warning{{FALSE}}182  }183}184 185void comparison_le_ne(int x, int y) {186  if (x <= y)187    if (x != y) {188      clang_analyzer_eval(x < y);  // expected-warning{{TRUE}}189      clang_analyzer_eval(y > x);  // expected-warning{{TRUE}}190      clang_analyzer_eval(x >= y); // expected-warning{{FALSE}}191      clang_analyzer_eval(y <= x); // expected-warning{{FALSE}}192    }193}194 195void comparison_ge_ne(int x, int y) {196  if (x >= y)197    if (x != y) {198      clang_analyzer_eval(x > y);  // expected-warning{{TRUE}}199      clang_analyzer_eval(y < x);  // expected-warning{{TRUE}}200      clang_analyzer_eval(x <= y); // expected-warning{{FALSE}}201      clang_analyzer_eval(y >= x); // expected-warning{{FALSE}}202    }203}204 205void comparison_le_ge(int x, int y) {206  if (x <= y)207    if (x >= y) {208      clang_analyzer_eval(x == y); // expected-warning{{TRUE}}209      clang_analyzer_eval(y == x); // expected-warning{{TRUE}}210      clang_analyzer_eval(x != y); // expected-warning{{FALSE}}211      clang_analyzer_eval(y != x); // expected-warning{{FALSE}}212    }213}214 215// Test the logic of reaching the `Unknonw` tristate in CmpOpTable.216void cmp_op_table_unknownX2(int x, int y, int z) {217  if (x >= y) {218                    // x >= y    [1, 1]219    if (x + z < y)220      return;221                    // x + z < y [0, 0]222    if (z != 0)223      return;224                    // x < y     [0, 0]225    clang_analyzer_eval(x > y);  // expected-warning{{TRUE}} expected-warning{{FALSE}}226  }227}228