// RUN: %clang_analyze_cc1 -analyze -triple x86_64-apple-darwin10 \ | |
// RUN: -analyzer-checker=core,debug.ExprInspection -verify %s | |
void clang_analyzer_warnIfReached(); | |
typedef struct { | |
int value; | |
} Struct; | |
typedef union { | |
Struct *ptr; | |
long num; | |
} __attribute__((transparent_union)) Alias; | |
void foo(Struct *x); | |
void foo(Alias y) { | |
if (y.ptr == 0) { | |
// no-crash | |
} | |
clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} | |
} | |
void foobar(long z); | |
void foobar(Alias z) { | |
if (z.num != 42) { | |
// no-crash | |
} | |
clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} | |
} | |
void foobaz(Alias x) { | |
if (x.ptr == 0) { | |
// no-crash | |
} | |
clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} | |
} | |
void bar(Struct arg) { | |
foo(&arg); | |
foobar(42); | |
foobaz(&arg); | |
} |