| /* PR middle-end/13400 */ |
| /* The following test used to fail at run-time with a write to read-only |
| memory, caused by if-conversion converting a conditional write into an |
| unconditional write. */ |
| |
| typedef struct {int c, l; char ch[3];} pstr; |
| const pstr ao = {2, 2, "OK"}; |
| const pstr * const a = &ao; |
| |
| void test1(void) |
| { |
| if (a->ch[a->l]) { |
| ((char *)a->ch)[a->l] = 0; |
| } |
| } |
| |
| void test2(void) |
| { |
| if (a->ch[a->l]) { |
| ((char *)a->ch)[a->l] = -1; |
| } |
| } |
| |
| void test3(void) |
| { |
| if (a->ch[a->l]) { |
| ((char *)a->ch)[a->l] = 1; |
| } |
| } |
| |
| int main(void) |
| { |
| test1(); |
| test2(); |
| test3(); |
| return 0; |
| } |
| |