1d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain// RUN: %clang_cc1 -verify -Warray-bounds-pointer-arithmetic %s 2d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain 3d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain// Test case from PR10615 4d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrainstruct ext2_super_block{ 5d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain unsigned char s_uuid[8]; // expected-note {{declared here}} 6d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain}; 7d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrainvoid* ext2_statfs (struct ext2_super_block *es,int a) 8d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain{ 9d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain return (void *)es->s_uuid + sizeof(int); // no-warning 10d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain} 11d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrainvoid* broken (struct ext2_super_block *es,int a) 12d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain{ 13d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain return (void *)es->s_uuid + 80; // expected-warning {{refers past the end of the array}} 14d10f4bc5a05ce0cdc1646dbb0f706bb9d3dfc0c5Kaelyn Uhrain} 1525b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smith 1625b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smith// Test case reduced from PR11594 1725b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smithstruct S { int n; }; 1825b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smithvoid pr11594(struct S *s) { 1925b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smith int a[10]; 2025b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smith int *p = a - s->n; 2125b009a9d2a79929112d3c28c7dd1730bf5246c8Richard Smith} 2200e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek 2300e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek// Test case reduced from <rdar://problem/11387038>. This resulted in 2400e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek// an assertion failure because of the typedef instead of an explicit 2500e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek// constant array type. 2600e1f6f5fed4f33f67181578be0232accd342282Ted Kremenekstruct RDar11387038 {}; 2700e1f6f5fed4f33f67181578be0232accd342282Ted Kremenektypedef struct RDar11387038 RDar11387038Array[1]; 2800e1f6f5fed4f33f67181578be0232accd342282Ted Kremenekstruct RDar11387038_Table { 2900e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek RDar11387038Array z; 3000e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek}; 3100e1f6f5fed4f33f67181578be0232accd342282Ted Kremenektypedef struct RDar11387038_Table * TPtr; 3200e1f6f5fed4f33f67181578be0232accd342282Ted Kremenektypedef TPtr *TabHandle; 3300e1f6f5fed4f33f67181578be0232accd342282Ted Kremenekstruct RDar11387038_B { TabHandle x; }; 3400e1f6f5fed4f33f67181578be0232accd342282Ted Kremenektypedef struct RDar11387038_B RDar11387038_B; 3500e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek 3600e1f6f5fed4f33f67181578be0232accd342282Ted Kremenekvoid radar11387038() { 3700e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek RDar11387038_B *pRDar11387038_B; 3800e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek struct RDar11387038* y = &(*pRDar11387038_B->x)->z[4]; 3900e1f6f5fed4f33f67181578be0232accd342282Ted Kremenek} 40