------- Comment #2 from rguenth at gcc dot gnu dot org 2006-09-21 09:12 -------
Confirmed. Gimplification get's this wrong. Testcase:
extern void abort (void);
void foo(int **p, int *q)
{
*(*p++)++ = *q++;
}
int main()
{
int i = 42, j = 0;
int *p = &i;
foo(&p, &j);
if (p - 1 != &i
|| j != 0
|| i != 0)
abort ();
return 0;
}
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rguenth at gcc dot gnu dot
| |org, rakdver at gcc dot gnu
| |dot org
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Keywords| |wrong-code
Known to fail| |4.0.3 4.1.1 4.2.0
Known to work| |3.4.6
Last reconfirmed|0000-00-00 00:00:00 |2006-09-21 09:12:02
date| |
Summary|*(* ppointer++)++ = |[4.0/4.1/4.2 Regression] *(*
|*pointer++ generates bad |ppointer++)++ = *pointer++
|code |generates bad code
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29154