xref: /aosp_15_r20/external/clang/test/Sema/array-bounds-ptr-arith.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -verify -Warray-bounds-pointer-arithmetic %s
2*67e74705SXin Li 
3*67e74705SXin Li // Test case from PR10615
4*67e74705SXin Li struct ext2_super_block{
5*67e74705SXin Li   unsigned char s_uuid[8]; // expected-note {{declared here}}
6*67e74705SXin Li };
ext2_statfs(struct ext2_super_block * es,int a)7*67e74705SXin Li void* ext2_statfs (struct ext2_super_block *es,int a)
8*67e74705SXin Li {
9*67e74705SXin Li 	 return (void *)es->s_uuid + sizeof(int); // no-warning
10*67e74705SXin Li }
broken(struct ext2_super_block * es,int a)11*67e74705SXin Li void* broken (struct ext2_super_block *es,int a)
12*67e74705SXin Li {
13*67e74705SXin Li 	 return (void *)es->s_uuid + 80; // expected-warning {{refers past the end of the array}}
14*67e74705SXin Li }
15*67e74705SXin Li 
16*67e74705SXin Li // Test case reduced from PR11594
17*67e74705SXin Li struct S { int n; };
pr11594(struct S * s)18*67e74705SXin Li void pr11594(struct S *s) {
19*67e74705SXin Li   int a[10];
20*67e74705SXin Li   int *p = a - s->n;
21*67e74705SXin Li }
22*67e74705SXin Li 
23*67e74705SXin Li // Test case reduced from <rdar://problem/11387038>.  This resulted in
24*67e74705SXin Li // an assertion failure because of the typedef instead of an explicit
25*67e74705SXin Li // constant array type.
26*67e74705SXin Li struct RDar11387038 {};
27*67e74705SXin Li typedef struct RDar11387038 RDar11387038Array[1];
28*67e74705SXin Li struct RDar11387038_Table {
29*67e74705SXin Li   RDar11387038Array z;
30*67e74705SXin Li };
31*67e74705SXin Li typedef struct RDar11387038_Table * TPtr;
32*67e74705SXin Li typedef TPtr *TabHandle;
33*67e74705SXin Li struct RDar11387038_B { TabHandle x; };
34*67e74705SXin Li typedef struct RDar11387038_B RDar11387038_B;
35*67e74705SXin Li 
radar11387038()36*67e74705SXin Li void radar11387038() {
37*67e74705SXin Li   RDar11387038_B *pRDar11387038_B;
38*67e74705SXin Li   struct RDar11387038* y = &(*pRDar11387038_B->x)->z[4];
39*67e74705SXin Li }
40