brintos

brintos / llvm-project-archived public Read only

0
0
Text · 989 B · 9d59d28 Raw
42 lines · c
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -analyzer-config eagerly-assume=false %s2 3void clang_analyzer_eval(int);4void clang_analyzer_warnIfReached(void);5 6void f(void) {7  void (*p)(void);8  p = f;9  p = &f;10  p();11  (*p)();12}13 14void g(void (*fp)(void));15 16void f2(void) {17  g(f);18}19 20void f3(void (*f)(void), void (*g)(void)) {21  clang_analyzer_eval(!f); // expected-warning{{UNKNOWN}}22  f();23  clang_analyzer_eval(!f); // expected-warning{{FALSE}}24 25  clang_analyzer_eval(!g); // expected-warning{{UNKNOWN}}26  (*g)();27  clang_analyzer_eval(!g); // expected-warning{{FALSE}}28}29 30void nullFunctionPointerConstant(void) {31  void (*f)(void) = 0;32  f(); // expected-warning{{Called function pointer is null}}33  clang_analyzer_warnIfReached(); // no-warning34}35 36void nullFunctionPointerConstraint(void (*f)(void)) {37  if (f)38    return;39  f(); // expected-warning{{Called function pointer is null}}40  clang_analyzer_warnIfReached(); // no-warning41}42