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