forked from OSchip/llvm-project
41 lines
805 B
C
41 lines
805 B
C
// 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);
|
|
}
|