41 lines · c
1// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 \2// RUN: -analyzer-checker=core,debug.ExprInspection -verify %s3 4void clang_analyzer_warnIfReached(void);5 6typedef struct {7 int value;8} Struct;9 10typedef union {11 Struct *ptr;12 long num;13} __attribute__((transparent_union)) Alias;14 15void foo(Struct *x);16void foo(Alias y) {17 if (y.ptr == 0) {18 // no-crash19 }20 clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}21}22void foobar(long z);23void foobar(Alias z) {24 if (z.num != 42) {25 // no-crash26 }27 clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}28}29 30void foobaz(Alias x) {31 if (x.ptr == 0) {32 // no-crash33 }34 clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}35}36void bar(Struct arg) {37 foo(&arg);38 foobar(42);39 foobaz(&arg);40}41