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