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