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