// 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); } }