Files
clang-p2996/clang/test/Analysis/func.c
Aaron Ballman 1ea584377e A significant number of our tests in C accidentally use functions
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).
2022-02-13 08:03:40 -05:00

42 lines
1012 B
C

// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify -analyzer-config eagerly-assume=false %s
void clang_analyzer_eval(int);
void clang_analyzer_warnIfReached(void);
void f(void) {
void (*p)(void);
p = f;
p = &f;
p();
(*p)();
}
void g(void (*fp)(void));
void f2(void) {
g(f);
}
void f3(void (*f)(void), void (*g)(void)) {
clang_analyzer_eval(!f); // expected-warning{{UNKNOWN}}
f();
clang_analyzer_eval(!f); // expected-warning{{FALSE}}
clang_analyzer_eval(!g); // expected-warning{{UNKNOWN}}
(*g)();
clang_analyzer_eval(!g); // expected-warning{{FALSE}}
}
void nullFunctionPointerConstant(void) {
void (*f)(void) = 0;
f(); // expected-warning{{Called function pointer is null}}
clang_analyzer_warnIfReached(); // no-warning
}
void nullFunctionPointerConstraint(void (*f)(void)) {
if (f)
return;
f(); // expected-warning{{Called function pointer is null}}
clang_analyzer_warnIfReached(); // no-warning
}