xref: /netbsd-src/external/apache2/llvm/dist/clang/docs/analyzer/checkers/callandmessage_example.c (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1*7330f729Sjoerg //C
test()2*7330f729Sjoerg void test() {
3*7330f729Sjoerg    void (*foo)(void);
4*7330f729Sjoerg    foo = 0;
5*7330f729Sjoerg    foo(); // warn: function pointer is null
6*7330f729Sjoerg  }
7*7330f729Sjoerg 
8*7330f729Sjoerg  // C++
9*7330f729Sjoerg  class C {
10*7330f729Sjoerg  public:
11*7330f729Sjoerg    void f();
12*7330f729Sjoerg  };
13*7330f729Sjoerg 
test()14*7330f729Sjoerg  void test() {
15*7330f729Sjoerg    C *pc;
16*7330f729Sjoerg    pc->f(); // warn: object pointer is uninitialized
17*7330f729Sjoerg  }
18*7330f729Sjoerg 
19*7330f729Sjoerg  // C++
20*7330f729Sjoerg  class C {
21*7330f729Sjoerg  public:
22*7330f729Sjoerg    void f();
23*7330f729Sjoerg  };
24*7330f729Sjoerg 
test()25*7330f729Sjoerg  void test() {
26*7330f729Sjoerg    C *pc = 0;
27*7330f729Sjoerg    pc->f(); // warn: object pointer is null
28*7330f729Sjoerg  }
29*7330f729Sjoerg 
30*7330f729Sjoerg  // Objective-C
31*7330f729Sjoerg  @interface MyClass : NSObject
property(readwrite,assign)32*7330f729Sjoerg  @property (readwrite,assign) id x;
33*7330f729Sjoerg  - (long double)longDoubleM;
34*7330f729Sjoerg  @end
35*7330f729Sjoerg 
36*7330f729Sjoerg  void test() {
37*7330f729Sjoerg    MyClass *obj1;
38*7330f729Sjoerg    long double ld1 = [obj1 longDoubleM];
39*7330f729Sjoerg      // warn: receiver is uninitialized
40*7330f729Sjoerg  }
41*7330f729Sjoerg 
42*7330f729Sjoerg  // Objective-C
43*7330f729Sjoerg  @interface MyClass : NSObject
property(readwrite,assign)44*7330f729Sjoerg  @property (readwrite,assign) id x;
45*7330f729Sjoerg  - (long double)longDoubleM;
46*7330f729Sjoerg  @end
47*7330f729Sjoerg 
48*7330f729Sjoerg  void test() {
49*7330f729Sjoerg    MyClass *obj1;
50*7330f729Sjoerg    id i = obj1.x; // warn: uninitialized object pointer
51*7330f729Sjoerg  }
52*7330f729Sjoerg 
53*7330f729Sjoerg  // Objective-C
54*7330f729Sjoerg  @interface Subscriptable : NSObject
55*7330f729Sjoerg  - (id)objectAtIndexedSubscript:(unsigned int)index;
56*7330f729Sjoerg  @end
57*7330f729Sjoerg 
58*7330f729Sjoerg  @interface MyClass : Subscriptable
property(readwrite,assign)59*7330f729Sjoerg  @property (readwrite,assign) id x;
60*7330f729Sjoerg  - (long double)longDoubleM;
61*7330f729Sjoerg  @end
62*7330f729Sjoerg 
63*7330f729Sjoerg  void test() {
64*7330f729Sjoerg    MyClass *obj1;
65*7330f729Sjoerg    id i = obj1[0]; // warn: uninitialized object pointer
66*7330f729Sjoerg  }
67