// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-store=region -verify %s bool PR14634(int x) { double y = (double)x; return !y; } bool PR14634_implicit(int x) { double y = (double)x; return y; } void intAsBoolAsSwitchCondition(int c) { switch ((bool)c) { // expected-warning {{switch condition has boolean value}} case 0: break; } switch ((int)(bool)c) { // no-warning case 0: break; } } int *&castToIntPtrLValueRef(char *p) { return (int *&)*(int *)p; } bool testCastToIntPtrLValueRef(char *p, int *s) { return castToIntPtrLValueRef(p) != s; // no-crash } int *&&castToIntPtrRValueRef(char *p) { return (int *&&)*(int *)p; } bool testCastToIntPtrRValueRef(char *p, int *s) { return castToIntPtrRValueRef(p) != s; // no-crash } bool retrievePointerFromBoolean(int *p) { bool q; *reinterpret_cast<int **>(&q) = p; return q; } |