------- 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