1 #include "check_debug.h" 2 3 struct foo { 4 int a, b, c; 5 }; 6 7 struct bar { 8 struct foo *foo; 9 }; 10 11 struct foo *get_foo(struct bar *bar) 12 { 13 return bar->foo; 14 } 15 16 void frob(struct bar *bar) 17 { 18 struct foo *f = bar->foo; 19 f->a = 5; 20 } 21 22 int test(struct bar *bar) 23 { 24 struct foo *f = get_foo(bar); 25 26 f->a = 1; 27 frob(bar); 28 __smatch_implied(bar->foo->a); 29 __smatch_implied(f->a); 30 31 return 0; 32 } 33 34 /* 35 * check-name: smatch: indirection #2 36 * check-command: smatch -I.. sm_indirection2.c 37 * 38 * check-output-start 39 sm_indirection2.c:28 test() implied: bar->foo->a = '5' 40 sm_indirection2.c:29 test() implied: f->a = '5' 41 * check-output-end 42 */ 43