------- Comment #13 from pinskia at gcc dot gnu dot org 2006-09-29 16:58 ------- And here is a testcase that fails also for 4.0.0 and self contained also: #include <new> int foo(int n, int *f, long *f1) { long t = 0; *f = 1; long *fp = new(f) long; *fp = 1; for (int i=0; i<n; ++i) { t += *fp; int *b = new (f) int; *b = i + *f1; fp = new (f) long; *fp = t*t; } t+=*fp; return t+*f1; }
extern "C" void abort (); int main(void) { if (sizeof(int) != sizeof(long) return 0; int *a = new int; long *b = new long; if (foo(2, a, b) != 6) abort (); return 0; } -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |4.0.0 4.1.0 4.2.0 Known to work|4.1.1 |3.4.0 Summary|[4.2 Regression] placement |[4.0/4.1/4.2 Regression] |new does not change the |placement new does not |dynamic type as it should |change the dynamic type as | |it should http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29286