mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-30 20:36:05 +00:00

without prototypes. This patch converts the function signatures to have a prototype for the situations where the test is not specific to K&R C declarations. e.g., void func(); becomes void func(void); This is the ninth batch of tests being updated (there are a significant number of other tests left to be updated).
41 lines
809 B
C
41 lines
809 B
C
// RUN: %clang_analyze_cc1 -analyze -triple x86_64-apple-darwin10 \
|
|
// RUN: -analyzer-checker=core,debug.ExprInspection -verify %s
|
|
|
|
void clang_analyzer_warnIfReached(void);
|
|
|
|
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);
|
|
}
|