PR middle-end/13400 * ifcvt.c (noce_process_if_block): Disable unconditional write optimizations if we could introduce a store to trapping memory that wasn't present previously. * gcc.c-torture/execute/20031215-1.c: New test case. From-SVN: r74663
39 lines
638 B
C
39 lines
638 B
C
/* 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;
|
|
}
|
|
|