1 #include <stdio.h>
2 #include "check_debug.h"
3 
4 static int xxx = 234;
5 
6 struct foo {
7 	int a, b, c;
8 	int (*func)(struct foo *p);
9 };
10 
frob1(struct foo * p)11 static int frob1(struct foo *p)
12 {
13 	printf("%d\n", p->a);
14 	__smatch_implied(p->a);
15 	return p->a + 1;
16 }
frob2(struct foo * p)17 static int frob2(struct foo *p)
18 {
19 	printf("%d\n", p->a);
20 	__smatch_implied(p->a);
21 	return p->a + 1;
22 }
23 
24 static struct foo one_struct = {
25 	.a = 1,
26 	.func = frob1,
27 };
28 static struct foo two_struct = {
29 	.a = 2,
30 	.func = frob2,
31 };
32 
main(void)33 int main(void)
34 {
35 	struct foo *p = &one_struct;
36 	int ret;
37 
38 	ret = p->func(p);
39 //	__smatch_implied(ret);
40 
41 	return 0;
42 }
43 
44 /*
45  * check-name: smatch mtag #1
46  * check-command: validation/smatch_db_test.sh -I.. sm_mtag1.c
47  *
48  * check-output-start
49 sm_mtag1.c:14 frob1() implied: p->a = '1'
50 sm_mtag1.c:20 frob2() implied: p->a = '2'
51  * check-output-end
52  */
53