array-struct.c revision 33d7cbfc0aa25dcc5d4470f39b374a1b9473a190
182bd99f4db2454cc6e1b7bfaac6db25cb3444ddcTed Kremenek// RUN: clang -checker-simple -verify %s
2512cdb57a045e9b889112a0c6ce724b173442763Zhongxing Xu// RUN: clang -checker-simple -analyzer-store-region -verify %s
3ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu
472e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xustruct s {
572e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xu  int data;
672e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xu  int data_array[10];
772e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xu};
8ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu
9234a7d2bf50ba55496433f896577838407119e1aZhongxing Xutypedef struct {
10234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu  int data;
11234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu} STYPE;
12234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu
1304b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xuvoid g1(struct s* p);
1404b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xu
15ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xuvoid f(void) {
16ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  int a[10];
17ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  int (*p)[10];
18ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  p = &a;
19ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  (*p)[3] = 1;
20ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu
21ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  struct s d;
22ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  struct s *q;
23ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu  q = &d;
2472e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xu  q->data = 3;
2572e1682bbdfd497ce838d648bb2cb6047c015f6fZhongxing Xu  d.data_array[9] = 17;
26ef8b28e9459e729b7bd8c826d204621b039611faZhongxing Xu}
272e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xu
282e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xuvoid f2() {
292e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xu  char *p = "/usr/local";
302e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xu  char (*q)[4];
312e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xu  q = &"abc";
322e971208f48a06b2880a28ba16389f3a0d4213dfZhongxing Xu}
33234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu
34234a7d2bf50ba55496433f896577838407119e1aZhongxing Xuvoid f3() {
35234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu  STYPE s;
36234a7d2bf50ba55496433f896577838407119e1aZhongxing Xu}
37df2aa1efbb940aa7bf5ef49235e1d7aff0d52128Zhongxing Xu
38df2aa1efbb940aa7bf5ef49235e1d7aff0d52128Zhongxing Xuvoid f4() {
39df2aa1efbb940aa7bf5ef49235e1d7aff0d52128Zhongxing Xu  int a[] = { 1, 2, 3};
40df2aa1efbb940aa7bf5ef49235e1d7aff0d52128Zhongxing Xu  int b[3] = { 1, 2 };
41df2aa1efbb940aa7bf5ef49235e1d7aff0d52128Zhongxing Xu}
4204b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xu
4304b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xuvoid f5() {
4404b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xu  struct s data;
4504b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xu  g1(&data);
4604b90bc00fc6ce8bc6c559e56220ceb77cdbccf6Zhongxing Xu}
47b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xu
48b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xuvoid f6() {
49b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xu  char *p;
50b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xu  p = __builtin_alloca(10);
51b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xu  p[1] = 'a';
52b670133b9e9fd7bce078674d782dad9d7c320f9dZhongxing Xu}
53fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu
54fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xustruct s2;
55fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu
56fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xuvoid g2(struct s2 *p);
57fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu
58fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xuvoid f7() {
59fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu  struct s2 *p = __builtin_alloca(10);
60fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu  g2(p);
61fb75b2583eb82dc42cb8e5bd3c1eda1c661eb76dZhongxing Xu}
6226134a1b596b9763a6975f15bf296a580b141114Zhongxing Xu
6326134a1b596b9763a6975f15bf296a580b141114Zhongxing Xuvoid f8() {
6426134a1b596b9763a6975f15bf296a580b141114Zhongxing Xu  int a[10];
6533d7cbfc0aa25dcc5d4470f39b374a1b9473a190Zhongxing Xu  a[sizeof(a)/sizeof(int) - 1] = 1; // no-warning
6626134a1b596b9763a6975f15bf296a580b141114Zhongxing Xu}
67617ff31664d7aaaf391272da30d3ae65d0426df7Zhongxing Xu
68617ff31664d7aaaf391272da30d3ae65d0426df7Zhongxing Xuvoid f9() {
69617ff31664d7aaaf391272da30d3ae65d0426df7Zhongxing Xu  struct s a[10];
70617ff31664d7aaaf391272da30d3ae65d0426df7Zhongxing Xu}
71