This revision was automatically updated to reflect the committed changes.
Closed by commit rC343048: [analyzer] Add a testing facility for testing
relationships between symbols. (authored by dergachev, committed by ).
Repository:
rL LLVM
https://reviews.llvm.org/D52133
Files:
docs/analyzer/DebugChecks.rst
lib/StaticAnalyzer/Checkers/ExprInspectionChecker.cpp
test/Analysis/expr-inspection.cpp
test/Analysis/svalbuilder-rearrange-comparisons.c
Index: docs/analyzer/DebugChecks.rst
===================================================================
--- docs/analyzer/DebugChecks.rst
+++ docs/analyzer/DebugChecks.rst
@@ -255,6 +255,23 @@
clang_analyzer_hashDump(x); // expected-warning{{hashed string for x}}
}
+- ``void clang_analyzer_denote(int, const char *);``
+
+ Denotes symbols with strings. A subsequent call to clang_analyzer_express()
+ will expresses another symbol in terms of these string. Useful for testing
+ relationships between different symbols.
+
+ Example usage::
+
+ void foo(int x) {
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(x + 1); // expected-warning{{$x + 1}}
+ }
+
+- ``void clang_analyzer_express(int);``
+
+ See clang_analyzer_denote().
+
Statistics
==========
Index: test/Analysis/svalbuilder-rearrange-comparisons.c
===================================================================
--- test/Analysis/svalbuilder-rearrange-comparisons.c
+++ test/Analysis/svalbuilder-rearrange-comparisons.c
@@ -1,10 +1,8 @@
// RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection,core.builtin -analyzer-config aggressive-binary-operation-simplification=true -verify -analyzer-config eagerly-assume=false %s
-// Temporary xfailing, as debug printing functionality has changed.
-// XFAIL: *
-
-void clang_analyzer_dump(int x);
void clang_analyzer_eval(int x);
+void clang_analyzer_denote(int x, const char *literal);
+void clang_analyzer_express(int x);
void exit(int);
@@ -29,907 +27,951 @@
void compare_different_symbol_equal() {
int x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 0}}
}
void compare_different_symbol_plus_left_int_equal() {
- int x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 1;
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
}
void compare_different_symbol_minus_left_int_equal() {
- int x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 1;
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
}
void compare_different_symbol_plus_right_int_equal() {
- int x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y += 2;
+ clang_analyzer_express(y); // expected-warning {{$y + 2}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 2}}
}
void compare_different_symbol_minus_right_int_equal() {
- int x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y -= 2;
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 2}}
}
void compare_different_symbol_plus_left_plus_right_int_equal() {
- int x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
}
void compare_different_symbol_plus_left_minus_right_int_equal() {
- int x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 3}}
}
void compare_different_symbol_minus_left_plus_right_int_equal() {
- int x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 3}}
}
void compare_different_symbol_minus_left_minus_right_int_equal() {
- int x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
}
void compare_same_symbol_equal() {
int x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_int_equal() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_int_equal() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_right_int_equal() {
- int x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_right_int_equal() {
- int x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_plus_right_int_equal() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_minus_right_int_equal() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_plus_right_int_equal() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_minus_right_int_equal() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_different_symbol_less_or_equal() {
int x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 0}}
}
void compare_different_symbol_plus_left_int_less_or_equal() {
- int x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
}
void compare_different_symbol_minus_left_int_less_or_equal() {
- int x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 1;
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
}
void compare_different_symbol_plus_right_int_less_or_equal() {
- int x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y += 2;
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 2}}
}
void compare_different_symbol_minus_right_int_less_or_equal() {
- int x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y -= 2;
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 2}}
}
void compare_different_symbol_plus_left_plus_right_int_less_or_equal() {
- int x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
}
void compare_different_symbol_plus_left_minus_right_int_less_or_equal() {
- int x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 3}}
}
void compare_different_symbol_minus_left_plus_right_int_less_or_equal() {
- int x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 3}}
}
void compare_different_symbol_minus_left_minus_right_int_less_or_equal() {
- int x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
}
void compare_same_symbol_less_or_equal() {
int x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_int_less_or_equal() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_int_less_or_equal() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_right_int_less_or_equal() {
- int x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_minus_right_int_less_or_equal() {
- int x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{FALSE}}
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_plus_right_int_less_or_equal() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_minus_right_int_less_or_equal() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_plus_right_int_less_or_equal() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_minus_left_minus_right_int_less_or_equal() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_different_symbol_less() {
int x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 0}}
}
void compare_different_symbol_plus_left_int_less() {
- int x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
}
void compare_different_symbol_minus_left_int_less() {
- int x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
}
void compare_different_symbol_plus_right_int_less() {
- int x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y += 2;
+ clang_analyzer_express(y); // expected-warning {{$y + 2}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 2}}
}
void compare_different_symbol_minus_right_int_less() {
- int x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 2}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ y -= 2;
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 2}}
}
void compare_different_symbol_plus_left_plus_right_int_less() {
- int x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
}
void compare_different_symbol_plus_left_minus_right_int_less() {
- int x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x += 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 3}}
}
void compare_different_symbol_minus_left_plus_right_int_less() {
- int x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 3}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y += 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 3}}
}
void compare_different_symbol_minus_left_minus_right_int_less() {
- int x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 1}}
+ int x = f(), y = f();
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ x -= 2;
+ y -= 1;
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
}
void compare_same_symbol_less() {
int x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_int_less() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_int_less() {
int x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_right_int_less() {
- int x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{TRUE}}
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
}
void compare_same_symbol_minus_right_int_less() {
- int x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_plus_right_int_less() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_minus_right_int_less() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_minus_left_plus_right_int_less() {
- int x = f(), y = x+1;
+ int x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
}
void compare_same_symbol_minus_left_minus_right_int_less() {
- int x = f(), y = x-1;
+ int x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_different_symbol_equal_unsigned() {
unsigned x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 0}}
}
void compare_different_symbol_plus_left_int_equal_unsigned() {
- unsigned x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 1}}
+ unsigned x = f() + 1, y = f();
+ clang_analyzer_denote(x - 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
}
void compare_different_symbol_minus_left_int_equal_unsigned() {
- unsigned x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 1}}
+ unsigned x = f() - 1, y = f();
+ clang_analyzer_denote(x + 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
}
void compare_different_symbol_plus_right_int_equal_unsigned() {
- unsigned x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 2}}
+ unsigned x = f(), y = f() + 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y - 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y + 2}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 2}}
}
void compare_different_symbol_minus_right_int_equal_unsigned() {
- unsigned x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 2}}
+ unsigned x = f(), y = f() - 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y + 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 2}}
}
void compare_different_symbol_plus_left_plus_right_int_equal_unsigned() {
- unsigned x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 1}}
+ unsigned x = f() + 2, y = f() + 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
}
void compare_different_symbol_plus_left_minus_right_int_equal_unsigned() {
- unsigned x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) == 3}}
+ unsigned x = f() + 2, y = f() - 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$y - $x == 3}}
}
void compare_different_symbol_minus_left_plus_right_int_equal_unsigned() {
- unsigned x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 3}}
+ unsigned x = f() - 2, y = f() + 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 3}}
}
void compare_different_symbol_minus_left_minus_right_int_equal_unsigned() {
- unsigned x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) == 1}}
+ unsigned x = f() - 2, y = f() - 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
}
void compare_same_symbol_equal_unsigned() {
unsigned x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_int_equal_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) == (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x == y); // expected-warning {{$x + 1U == $x}}
}
void compare_same_symbol_minus_left_int_equal_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) == (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - 1U == $x}}
}
void compare_same_symbol_plus_right_int_equal_unsigned() {
- unsigned x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{(conj_$2{int}) == ((conj_$2{int}) + 1U)}}
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x == $x + 1U}}
}
void compare_same_symbol_minus_right_int_equal_unsigned() {
- unsigned x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{(conj_$2{int}) == ((conj_$2{int}) - 1U)}}
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x == $x - 1U}}
}
void compare_same_symbol_plus_left_plus_right_int_equal_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_minus_right_int_equal_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) == ((conj_$2{int}) - 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x + 1U == $x - 1U}}
}
void compare_same_symbol_minus_left_plus_right_int_equal_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x == y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) == ((conj_$2{int}) + 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x == y); // expected-warning {{$x - 1U == $x + 1U}}
}
void compare_same_symbol_minus_left_minus_right_int_equal_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x == y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
}
void compare_different_symbol_less_or_equal_unsigned() {
unsigned x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 0}}
}
void compare_different_symbol_plus_left_int_less_or_equal_unsigned() {
- unsigned x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 1}}
+ unsigned x = f() + 1, y = f();
+ clang_analyzer_denote(x - 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
}
void compare_different_symbol_minus_left_int_less_or_equal_unsigned() {
- unsigned x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 1}}
+ unsigned x = f() - 1, y = f();
+ clang_analyzer_denote(x + 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
}
void compare_different_symbol_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 2}}
+ unsigned x = f(), y = f() + 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y - 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y + 2}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 2}}
}
void compare_different_symbol_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 2}}
+ unsigned x = f(), y = f() - 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y + 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 2}}
}
void compare_different_symbol_plus_left_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 1}}
+ unsigned x = f() + 2, y = f() + 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
}
void compare_different_symbol_plus_left_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) >= 3}}
+ unsigned x = f() + 2, y = f() - 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 3}}
}
void compare_different_symbol_minus_left_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 3}}
+ unsigned x = f() - 2, y = f() + 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 3}}
}
void compare_different_symbol_minus_left_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) <= 1}}
+ unsigned x = f() - 2, y = f() - 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
}
void compare_same_symbol_less_or_equal_unsigned() {
unsigned x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_int_less_or_equal_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) <= (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x + 1U <= $x}}
}
void compare_same_symbol_minus_left_int_less_or_equal_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) <= (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - 1U <= $x}}
}
void compare_same_symbol_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{(conj_$2{int}) <= ((conj_$2{int}) + 1U)}}
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x <= $x + 1U}}
}
void compare_same_symbol_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{(conj_$2{int}) <= ((conj_$2{int}) - 1U)}}
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x <= $x - 1U}}
}
void compare_same_symbol_plus_left_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_same_symbol_plus_left_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) <= ((conj_$2{int}) - 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x + 1U <= $x - 1U}}
}
void compare_same_symbol_minus_left_plus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x <= y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) <= ((conj_$2{int}) + 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x <= y); // expected-warning {{$x - 1U <= $x + 1U}}
}
void compare_same_symbol_minus_left_minus_right_int_less_or_equal_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x <= y);
- // expected-warning@-1{{TRUE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
}
void compare_different_symbol_less_unsigned() {
unsigned x = f(), y = f();
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 0}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 0}}
}
void compare_different_symbol_plus_left_int_less_unsigned() {
- unsigned x = f()+1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 1}}
+ unsigned x = f() + 1, y = f();
+ clang_analyzer_denote(x - 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
}
void compare_different_symbol_minus_left_int_less_unsigned() {
- unsigned x = f()-1, y = f();
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$9{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 1}}
+ unsigned x = f() - 1, y = f();
+ clang_analyzer_denote(x + 1, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$y}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
}
void compare_different_symbol_plus_right_int_less_unsigned() {
- unsigned x = f(), y = f()+2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 2}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 2}}
+ unsigned x = f(), y = f() + 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y - 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y + 2}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 2}}
}
void compare_different_symbol_minus_right_int_less_unsigned() {
- unsigned x = f(), y = f()-2;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 2}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 2}}
+ unsigned x = f(), y = f() - 2;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y + 2, "$y");
+ clang_analyzer_express(y); // expected-warning {{$y - 2}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 2}}
}
void compare_different_symbol_plus_left_plus_right_int_less_unsigned() {
- unsigned x = f()+2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 1}}
+ unsigned x = f() + 2, y = f() + 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
}
void compare_different_symbol_plus_left_minus_right_int_less_unsigned() {
- unsigned x = f()+2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$9{int}) - (conj_$2{int})) > 3}}
+ unsigned x = f() + 2, y = f() - 1;
+ clang_analyzer_denote(x - 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x + 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$y - $x > 3}}
}
void compare_different_symbol_minus_left_plus_right_int_less_unsigned() {
- unsigned x = f()-2, y = f()+1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 3}}
+ unsigned x = f() - 2, y = f() + 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y - 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 3}}
}
void compare_different_symbol_minus_left_minus_right_int_less_unsigned() {
- unsigned x = f()-2, y = f()-1;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 2}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$9{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - (conj_$9{int})) < 1}}
+ unsigned x = f() - 2, y = f() - 1;
+ clang_analyzer_denote(x + 2, "$x");
+ clang_analyzer_denote(y + 1, "$y");
+ clang_analyzer_express(x); // expected-warning {{$x - 2}}
+ clang_analyzer_express(y); // expected-warning {{$y - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
}
void compare_same_symbol_less_unsigned() {
unsigned x = f(), y = x;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_int_less_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) < (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x < y); // expected-warning {{$x + 1U < $x}}
}
void compare_same_symbol_minus_left_int_less_unsigned() {
unsigned x = f(), y = x;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) < (conj_$2{int})}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - 1U < $x}}
}
void compare_same_symbol_plus_right_int_less_unsigned() {
- unsigned x = f(), y = x+1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{(conj_$2{int}) < ((conj_$2{int}) + 1U)}}
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x < $x + 1U}}
}
void compare_same_symbol_minus_right_int_less_unsigned() {
- unsigned x = f(), y = x-1;
- clang_analyzer_dump(x); // expected-warning{{conj_$2{int}}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{(conj_$2{int}) < ((conj_$2{int}) - 1U)}}
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x < $x - 1U}}
}
void compare_same_symbol_plus_left_plus_right_int_less_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void compare_same_symbol_plus_left_minus_right_int_less_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
++x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) + 1U) < ((conj_$2{int}) - 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x + 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x + 1U < $x - 1U}}
}
void compare_same_symbol_minus_left_plus_right_int_less_unsigned() {
- unsigned x = f(), y = x+1;
+ unsigned x = f(), y = x + 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) + 1}}
- clang_analyzer_dump(x < y);
- // expected-warning@-1{{((conj_$2{int}) - 1U) < ((conj_$2{int}) + 1U)}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x + 1}}
+ clang_analyzer_express(x < y); // expected-warning {{$x - 1U < $x + 1U}}
}
void compare_same_symbol_minus_left_minus_right_int_less_unsigned() {
- unsigned x = f(), y = x-1;
+ unsigned x = f(), y = x - 1;
+ clang_analyzer_denote(x, "$x");
--x;
- clang_analyzer_dump(x); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_dump(y); // expected-warning{{(conj_$2{int}) - 1}}
- clang_analyzer_eval(x < y);
- // expected-warning@-1{{FALSE}}
+ clang_analyzer_express(x); // expected-warning {{$x - 1}}
+ clang_analyzer_express(y); // expected-warning {{$x - 1}}
+ clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
}
void overflow(signed char n, signed char m) {
if (n + 0 > m + 0) {
- clang_analyzer_eval(n - 126 == m + 3); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(n - 126 == m + 3); // expected-warning {{UNKNOWN}}
}
}
Index: test/Analysis/expr-inspection.cpp
===================================================================
--- test/Analysis/expr-inspection.cpp
+++ test/Analysis/expr-inspection.cpp
@@ -0,0 +1,30 @@
+// RUN: %clang_analyze_cc1 -x c++ -analyzer-checker=debug.ExprInspection -verify %s
+
+// Self-tests for the debug.ExprInspection checker.
+
+void clang_analyzer_denote(int x, const char *str);
+void clang_analyzer_express(int x);
+
+// Invalid declarations to test sanity checks.
+void clang_analyzer_denote();
+void clang_analyzer_denote(int x);
+void clang_analyzer_express();
+
+void foo(int x, unsigned y) {
+ clang_analyzer_denote(); // expected-warning{{clang_analyzer_denote() requires a symbol and a string literal}}
+ clang_analyzer_express(); // expected-warning{{clang_analyzer_express() requires a symbol}}
+
+ clang_analyzer_denote(x); // expected-warning{{clang_analyzer_denote() requires a symbol and a string literal}}
+ clang_analyzer_express(x); // expected-warning{{Unable to express}}
+
+ clang_analyzer_denote(x, "$x");
+ clang_analyzer_denote(y, "$y");
+ clang_analyzer_express(x + y); // expected-warning{{$x + $y}}
+
+ clang_analyzer_denote(1, "$z"); // expected-warning{{Not a symbol}}
+ clang_analyzer_express(1); // expected-warning{{Not a symbol}}
+
+ clang_analyzer_denote(x + 1, "$w"); // expected-warning{{Not an atomic symbol}}
+ clang_analyzer_express(x + 1); // expected-warning{{$x + 1}}
+ clang_analyzer_express(y + 1); // expected-warning{{$y + 1U}}
+}
Index: lib/StaticAnalyzer/Checkers/ExprInspectionChecker.cpp
===================================================================
--- lib/StaticAnalyzer/Checkers/ExprInspectionChecker.cpp
+++ lib/StaticAnalyzer/Checkers/ExprInspectionChecker.cpp
@@ -43,6 +43,8 @@
void analyzerPrintState(const CallExpr *CE, CheckerContext &C) const;
void analyzerGetExtent(const CallExpr *CE, CheckerContext &C) const;
void analyzerHashDump(const CallExpr *CE, CheckerContext &C) const;
+ void analyzerDenote(const CallExpr *CE, CheckerContext &C) const;
+ void analyzerExpress(const CallExpr *CE, CheckerContext &C) const;
typedef void (ExprInspectionChecker::*FnCheck)(const CallExpr *,
CheckerContext &C) const;
@@ -60,6 +62,7 @@
}
REGISTER_SET_WITH_PROGRAMSTATE(MarkedSymbols, SymbolRef)
+REGISTER_MAP_WITH_PROGRAMSTATE(DenotedSymbols, SymbolRef, const StringLiteral *)
bool ExprInspectionChecker::evalCall(const CallExpr *CE,
CheckerContext &C) const {
@@ -82,6 +85,8 @@
.Case("clang_analyzer_numTimesReached",
&ExprInspectionChecker::analyzerNumTimesReached)
.Case("clang_analyzer_hashDump", &ExprInspectionChecker::analyzerHashDump)
+ .Case("clang_analyzer_denote", &ExprInspectionChecker::analyzerDenote)
+ .Case("clang_analyzer_express", &ExprInspectionChecker::analyzerExpress)
.Default(nullptr);
if (!Handler)
@@ -264,6 +269,13 @@
N = BugNode;
State = State->remove<MarkedSymbols>(Sym);
}
+
+ for (auto I : State->get<DenotedSymbols>()) {
+ SymbolRef Sym = I.first;
+ if (!SymReaper.isLive(Sym))
+ State = State->remove<DenotedSymbols>(Sym);
+ }
+
C.addTransition(State, N);
}
@@ -295,6 +307,92 @@
reportBug(HashContent, C);
}
+void ExprInspectionChecker::analyzerDenote(const CallExpr *CE,
+ CheckerContext &C) const {
+ if (CE->getNumArgs() < 2) {
+ reportBug("clang_analyzer_denote() requires a symbol and a string literal",
+ C);
+ return;
+ }
+
+ SymbolRef Sym = C.getSVal(CE->getArg(0)).getAsSymbol();
+ if (!Sym) {
+ reportBug("Not a symbol", C);
+ return;
+ }
+
+ if (!isa<SymbolData>(Sym)) {
+ reportBug("Not an atomic symbol", C);
+ return;
+ }
+
+ const auto *E = dyn_cast<StringLiteral>(CE->getArg(1)->IgnoreParenCasts());
+ if (!E) {
+ reportBug("Not a string literal", C);
+ return;
+ }
+
+ ProgramStateRef State = C.getState();
+
+ C.addTransition(C.getState()->set<DenotedSymbols>(Sym, E));
+}
+
+class SymbolExpressor
+ : public SymExprVisitor<SymbolExpressor, Optional<std::string>> {
+ ProgramStateRef State;
+
+public:
+ SymbolExpressor(ProgramStateRef State) : State(State) {}
+
+ Optional<std::string> VisitSymExpr(const SymExpr *S) {
+ if (const StringLiteral *const *SLPtr = State->get<DenotedSymbols>(S)) {
+ const StringLiteral *SL = *SLPtr;
+ return std::string(SL->getBytes());
+ }
+ return None;
+ }
+
+ Optional<std::string> VisitSymIntExpr(const SymIntExpr *S) {
+ if (auto Str = Visit(S->getLHS()))
+ return (*Str + " " + BinaryOperator::getOpcodeStr(S->getOpcode()) + " " +
+ std::to_string(S->getRHS().getLimitedValue()) +
+ (S->getRHS().isUnsigned() ? "U" : ""))
+ .str();
+ return None;
+ }
+
+ Optional<std::string> VisitSymSymExpr(const SymSymExpr *S) {
+ if (auto Str1 = Visit(S->getLHS()))
+ if (auto Str2 = Visit(S->getRHS()))
+ return (*Str1 + " " + BinaryOperator::getOpcodeStr(S->getOpcode()) +
+ " " + *Str2).str();
+ return None;
+ }
+};
+
+void ExprInspectionChecker::analyzerExpress(const CallExpr *CE,
+ CheckerContext &C) const {
+ if (CE->getNumArgs() == 0) {
+ reportBug("clang_analyzer_express() requires a symbol", C);
+ return;
+ }
+
+ SymbolRef Sym = C.getSVal(CE->getArg(0)).getAsSymbol();
+ if (!Sym) {
+ reportBug("Not a symbol", C);
+ return;
+ }
+
+ SymbolExpressor V(C.getState());
+ auto Str = V.Visit(Sym);
+ if (!Str) {
+ reportBug("Unable to express", C);
+ return;
+ }
+
+ reportBug(*Str, C);
+}
+
void ento::registerExprInspectionChecker(CheckerManager &Mgr) {
Mgr.registerChecker<ExprInspectionChecker>();
}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits