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