On Wed, 2005-04-27 at 19:14 +0200, Richard Guenther wrote: > Jeffrey A Law wrote: > > On Wed, 2005-04-27 at 16:19 +0200, Richard Guenther wrote: > > > >>fold_indirect_ref, called from the gimplifier happily converts > >> > >> const char *a; > >> > >>... > >> > >> *(char *)&a[x] = 0; > >> > >>to > >> > >> a[x] = 0; > >> > >>confusing alias1 and ICEing in verify_ssa: > >> > >>/net/alwazn/home/rguenth/src/gcc/cvs/gcc-4.1/gcc/testsuite/gcc.c-torture/execute/20031215-1.c:11: > >>error: Statement makes a memory store, but has no V_MAY_DEFS nor > >>V_MUST_DEFS > >># VUSE <ao_1>; > >>ao.ch[D.1242_5] = 0; > >>/net/alwazn/home/rguenth/src/gcc/cvs/gcc-4.1/gcc/testsuite/gcc.c-torture/execute/20031215-1.c:11: > >>internal compiler error: verify_ssa failed. > >> > >>happens only for patched gcc where C frontend and fold happen to > >>produce .02.original: > >> > >>;; Function test1 (test1) > >>;; enabled by -tree-original > >> > >> > >>{ > >> if (ao.ch[ao.l] != 0) > >> { > >> *(char *) &ao.ch[(unsigned int) ao.l] = 0; > >> } > >>} > >> > >>then, generic is already wrong: > >> > >>test1 () > >>{ > >> int D.1240; > >> char D.1241; > >> unsigned int D.1242; > >> > >> D.1240 = ao.l; > >> D.1241 = ao.ch[D.1240]; > >> if (D.1241 != 0) > >> { > >> D.1240 = ao.l; > >> D.1242 = (unsigned int) D.1240; > >> ao.ch[D.1242] = 0; > >> } > >> > >>(not the missing cast). > >> > >> > >>something like the following patch fixes this. > > > > How ironic. I ran into a similar problem with the fold-after-TER > > patches. I just killed the STRIP_NOPS call, but using STRIP_TYPE_NOPS > > might be a better solution. > > So is the patch ok for mainline? It happened to be in during a > bootstrap and regtest on i686-linux for c only. I just ran a full bootstrap and regrest using STRIP_TYPE_NOPS + the fold after TER patch. I'm going to be checking in the STRIP_TYPE_NOPS change shortly...
jeff