1 #include "check_debug.h"
   2 
   3 struct foo {
   4         int a;
   5 };
   6 
   7 struct foo *a;
   8 struct foo *b;
   9 struct foo *c;
  10 struct foo *d;
  11 
  12 static void func (void)
  13 {
  14         struct foo *aa;
  15         int ab = 0;
  16         int ac = 1;
  17 
  18         aa->a = 1;
  19 
  20         if (a) {
  21                 a->a = 1;
  22         }
  23         a->a = 1;
  24 
  25         if (a && b) {
  26                 b->a = 1;
  27         }
  28 
  29         if (a || b) {
  30                 b->a = 1;
  31         }
  32 
  33         if (c) {
  34                 ab = 1;
  35         }
  36 
  37         if (ab) {
  38                 c->a = 1;
  39         }
  40 }
  41 /*
  42  * check-name: Null Dereferences
  43  * check-command: smatch --spammy -I.. sm_null_deref.c
  44  *
  45  * check-output-start
  46 sm_null_deref.c:18 func() error: potentially dereferencing uninitialized 'aa'.
  47 sm_null_deref.c:23 func() error: we previously assumed 'a' could be null (see line 20)
  48 sm_null_deref.c:25 func() warn: variable dereferenced before check 'a' (see line 23)
  49 sm_null_deref.c:30 func() error: we previously assumed 'b' could be null (see line 25)
  50  * check-output-end
  51  */
  52