1 struct foo {
   2         int a;
   3 };
   4 
   5 struct foo *a;
   6 struct foo *b;
   7 
   8 struct foo *c;
   9 struct foo *d;
  10 struct foo *e;
  11 void func (void)
  12 {
  13         if (a?b:0) {
  14                 a->a = 1;
  15                 b->a = 1;
  16         }
  17         a->a = 1;
  18         b->a = 1;
  19         e->a = 1;
  20         d = returns_nonnull();
  21         if (c?d:e) {
  22                 c->a = 1;
  23                 d->a = 1;
  24                 e->a = 1;
  25         }
  26         e->a = 1;
  27 }
  28 
  29 /*
  30  * check-name: Ternary Conditions
  31  * check-command: smatch sm_select.c
  32  *
  33  * check-output-start
  34 sm_select.c:17 func() error: we previously assumed 'a' could be null (see line 13)
  35 sm_select.c:18 func() error: we previously assumed 'b' could be null (see line 13)
  36 sm_select.c:21 func() warn: variable dereferenced before check 'e' (see line 19)
  37 sm_select.c:22 func() error: we previously assumed 'c' could be null (see line 21)
  38  * check-output-end
  39  */
  40