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