1*1f5207b7SJohn Levon #include <stdlib.h>
2*1f5207b7SJohn Levon #include "check_debug.h"
3*1f5207b7SJohn Levon 
4*1f5207b7SJohn Levon struct foo {
5*1f5207b7SJohn Levon 	int x, y, z;
6*1f5207b7SJohn Levon 	int count;
7*1f5207b7SJohn Levon 	char msg[0];
8*1f5207b7SJohn Levon };
9*1f5207b7SJohn Levon 
10*1f5207b7SJohn Levon struct bar {
11*1f5207b7SJohn Levon 	int x, y, z;
12*1f5207b7SJohn Levon 	int count;
13*1f5207b7SJohn Levon 	char msg[1];
14*1f5207b7SJohn Levon };
15*1f5207b7SJohn Levon 
16*1f5207b7SJohn Levon struct outer1 {
17*1f5207b7SJohn Levon 	int x, y, z;
18*1f5207b7SJohn Levon 	struct foo foo;
19*1f5207b7SJohn Levon };
20*1f5207b7SJohn Levon 
21*1f5207b7SJohn Levon struct outer2 {
22*1f5207b7SJohn Levon 	int x, y, z;
23*1f5207b7SJohn Levon 	struct bar bar;
24*1f5207b7SJohn Levon };
25*1f5207b7SJohn Levon 
test(void)26*1f5207b7SJohn Levon int test(void)
27*1f5207b7SJohn Levon {
28*1f5207b7SJohn Levon 	struct foo *p;
29*1f5207b7SJohn Levon 	struct bar *q;
30*1f5207b7SJohn Levon 	struct outer1 *a;
31*1f5207b7SJohn Levon 	struct outer2 *b;
32*1f5207b7SJohn Levon 
33*1f5207b7SJohn Levon 	p = malloc(sizeof(*p) + 100);
34*1f5207b7SJohn Levon 	__smatch_buf_size(p->msg);
35*1f5207b7SJohn Levon 
36*1f5207b7SJohn Levon 	q = malloc(sizeof(*q) + 100);
37*1f5207b7SJohn Levon 	__smatch_buf_size(q->msg);
38*1f5207b7SJohn Levon 
39*1f5207b7SJohn Levon 	a = malloc(sizeof(*a) + 100);
40*1f5207b7SJohn Levon 	__smatch_buf_size(a->foo);
41*1f5207b7SJohn Levon 
42*1f5207b7SJohn Levon 	b = malloc(sizeof(*b) + 100);
43*1f5207b7SJohn Levon 	__smatch_buf_size(b->bar);
44*1f5207b7SJohn Levon }
45*1f5207b7SJohn Levon 
46*1f5207b7SJohn Levon /*
47*1f5207b7SJohn Levon  * check-name: smatch buf size #8
48*1f5207b7SJohn Levon  * check-command: smatch -I.. sm_buf_size8.c
49*1f5207b7SJohn Levon  *
50*1f5207b7SJohn Levon  * check-output-start
51*1f5207b7SJohn Levon sm_buf_size8.c:34 test() buf size: 'p->msg' 100 elements, 100 bytes
52*1f5207b7SJohn Levon sm_buf_size8.c:37 test() buf size: 'q->msg' 101 elements, 101 bytes
53*1f5207b7SJohn Levon sm_buf_size8.c:40 test() buf size: 'a->foo' 0 elements, 116 bytes
54*1f5207b7SJohn Levon sm_buf_size8.c:43 test() buf size: 'b->bar' 0 elements, 120 bytes
55*1f5207b7SJohn Levon  * check-output-end
56*1f5207b7SJohn Levon  */
57