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 
get_foo(struct bar * bar)11 struct foo *get_foo(struct bar *bar)
12 {
13 	return bar->foo;
14 }
15 
frob(struct bar * bar)16 void frob(struct bar *bar)
17 {
18 	struct foo *f = bar->foo;
19 	f->a = 5;
20 }
21 
test(struct bar * bar)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