1 #include "check_debug.h"
   2 
   3 int copy_from_user(void *dest, void *src, int size){}
   4 
   5 struct my_struct {
   6         int x, y;
   7 };
   8 
   9 struct my_struct *returns_filter(struct my_struct *p)
  10 {
  11         return p;
  12 }
  13 
  14 struct my_struct *src, *a, *b;
  15 void test(void)
  16 {
  17         copy_from_user(a, src, sizeof(*a));
  18         b = returns_filter(a);
  19         __smatch_user_rl(b->y);
  20         b = returns_filter(src);
  21         __smatch_user_rl(b->y);
  22         b = returns_filter(a);
  23         __smatch_user_rl(b->y);
  24 }
  25 
  26 /*
  27  * check-name: smatch user data #3
  28  * check-command: smatch -p=kernel -I.. sm_user_data3.c
  29  *
  30  * check-output-start
  31 sm_user_data3.c:19 test() user rl: 'b->y' = 's32min-s32max'
  32 sm_user_data3.c:21 test() user rl: 'b->y' = ''
  33 sm_user_data3.c:23 test() user rl: 'b->y' = 's32min-s32max'
  34  * check-output-end
  35  */