| // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -DNO_CROSSCHECK -verify %s |
| // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-config crosscheck-with-z3=true -verify %s |
| // REQUIRES: z3 |
| |
| int foo(int x) |
| { |
| int *z = 0; |
| if ((x & 1) && ((x & 1) ^ 1)) |
| #ifdef NO_CROSSCHECK |
| return *z; // expected-warning {{Dereference of null pointer (loaded from variable 'z')}} |
| #else |
| return *z; // no-warning |
| #endif |
| return 0; |
| } |
| |
| void g(int d); |
| |
| void f(int *a, int *b) { |
| int c = 5; |
| if ((a - b) == 0) |
| c = 0; |
| if (a != b) |
| g(3 / c); // no-warning |
| } |
| |
| _Bool nondet_bool(); |
| |
| void h(int d) { |
| int x, y, k, z = 1; |
| while (z < k) { // expected-warning {{The right operand of '<' is a garbage value}} |
| z = 2 * z; |
| } |
| } |
| |
| void i() { |
| _Bool c = nondet_bool(); |
| if (c) { |
| h(1); |
| } else { |
| h(2); |
| } |
| } |