// RUN: %clang_analyze_cc1 %s \ // RUN: -analyzer-checker=core,debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ // RUN: -verify void clang_analyzer_eval(int); void clang_analyzer_dump(int); int test(int x, int y) { clang_analyzer_dump(-x); // expected-warning{{-reg_$0<int x>}} clang_analyzer_dump(~x); // expected-warning{{~reg_$0<int x>}} int z = x + y; clang_analyzer_dump(-z); // expected-warning{{-((reg_$0<int x>) + (reg_$1<int y>))}} clang_analyzer_dump(-(x + y)); // expected-warning{{-((reg_$0<int x>) + (reg_$1<int y>))}} clang_analyzer_dump(-x + y); // expected-warning{{(-reg_$0<int x>) + (reg_$1<int y>)}} if (-x == 0) { clang_analyzer_eval(-x == 0); // expected-warning{{TRUE}} clang_analyzer_eval(-x > 0); // expected-warning{{FALSE}} clang_analyzer_eval(-x < 0); // expected-warning{{FALSE}} } if (~y == 0) { clang_analyzer_eval(~y == 0); // expected-warning{{TRUE}} clang_analyzer_eval(~y > 0); // expected-warning{{FALSE}} clang_analyzer_eval(~y < 0); // expected-warning{{FALSE}} } (void)(x); return 42; } void test_svalbuilder_simplification(int x, int y) { if (x + y != 3) return; clang_analyzer_eval(-(x + y) == -3); // expected-warning{{TRUE}} // FIXME Commutativity is not supported yet. clang_analyzer_eval(-(y + x) == -3); // expected-warning{{UNKNOWN}} } int test_fp(int flag) { int value; if (flag == 0) value = 1; if (-flag == 0) return value; // no-warning return 42; }