| /* PR middle-end/99502 - missing -Warray-bounds on partial out of bounds |
| access in C++ |
| { dg-do compile } |
| { dg-options "-O2 -Wall" } */ |
| |
| typedef __INT8_TYPE__ int8_t; |
| typedef __INT16_TYPE__ int16_t; |
| typedef __INT32_TYPE__ int32_t; |
| |
| struct POD32 |
| { |
| int32_t i32; |
| }; |
| |
| int8_t a16[2]; |
| int8_t apod32[sizeof (POD32)]; |
| |
| void nowarn_pod32_assign () |
| { |
| POD32 *p = (POD32*)apod32; |
| *p = POD32 (); |
| } |
| |
| void nowarn_pod32_assign_member () |
| { |
| POD32 *p = (POD32*)apod32; |
| p->i32 = __LINE__; |
| } |
| |
| |
| void warn_pod32_assign () |
| { |
| POD32 *p = (POD32*)a16; |
| *p = POD32 (); // { dg-warning "-Warray-bounds" } |
| } |
| |
| void warn_pod32_assign_member () |
| { |
| POD32 *p = (POD32*)a16; |
| p->i32 = __LINE__; // { dg-warning "-Warray-bounds" } |
| } |
| |
| |
| struct BV32 // { dg-warning "-Warray-bounds" "due to pr99525" } |
| { |
| int32_t i32; |
| |
| virtual ~BV32 (); |
| }; |
| |
| int8_t abv32[sizeof (BV32)]; |
| |
| void nowarn_bv32_assign () |
| { |
| BV32 *p = (BV32*)abv32; |
| *p = BV32 (); |
| } |
| |
| void nowarn_bv32_assign_member () |
| { |
| BV32 *p = (BV32*)abv32; |
| p->i32 = __LINE__; |
| } |
| |
| void warn_bv32_assign () |
| { |
| BV32 *p = (BV32*)a16; |
| *p = BV32 (); // { dg-warning "-Warray-bounds" "pr99525" { xfail *-*-* } } |
| } |
| |
| void warn_bv32_assign_member () |
| { |
| BV32 *p = (BV32*)a16; |
| p->i32 = __LINE__; // { dg-warning "-Warray-bounds" } |
| } |
| |
| |
| struct DV32: virtual BV32 { }; |
| |
| int8_t adv32[sizeof (DV32)]; |
| int8_t adv32_m1[sizeof adv32 - 1]; |
| |
| void nowarn_dv32_assign () |
| { |
| DV32 *p = (DV32*)adv32; |
| *p = DV32 (); |
| } |
| |
| void nowarn_dv32_assign_member () |
| { |
| DV32 *p = (DV32*)adv32; |
| p->i32 = __LINE__; |
| } |
| |
| void warn_dv32_assign () |
| { |
| DV32 *p = (DV32*)adv32_m1; |
| *p = DV32 (); // { dg-warning "-Warray-bounds" "pr?????" { xfail *-*-* } } |
| } |
| |
| void warn_dv32_assign_member () |
| { |
| DV32 *p = (DV32*)adv32_m1; |
| p->i32 = __LINE__; // { dg-warning "-Warray-bounds" "pr?????" { xfail *-*-* } } |
| } |