// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -verify %s // REQUIRES: LP64 void clang_analyzer_eval(bool); int f1(char *dst) { char *p = dst + 4; char *q = dst + 3; return !(q >= p); } long f2(char *c) { return long(c) & 1; } bool f3() { return !false; } void *f4(int* w) { return reinterpret_cast<void*&>(w); } namespace { struct A { }; struct B { operator A() { return A(); } }; A f(char *dst) { B b; return b; } } namespace { struct S { void *p; }; void *f(S* w) { return &reinterpret_cast<void*&>(*w); } } namespace { struct C { void *p; static void f(); }; void C::f() { } } void vla(int n) { int nums[n]; nums[0] = 1; clang_analyzer_eval(nums[0] == 1); // expected-warning{{TRUE}} // This used to fail with MallocChecker on, and /only/ in C++ mode. // This struct is POD, though, so it should be fine to put it in a VLA. struct { int x; } structs[n]; structs[0].x = 1; clang_analyzer_eval(structs[0].x == 1); // expected-warning{{TRUE}} } void useIntArray(int []); void testIntArrayLiteral() { useIntArray((int []){ 1, 2, 3 }); }